codeclawd commited on
Commit
11973a8
·
verified ·
1 Parent(s): 303e50b

Add files using upload-large-folder tool

Browse files
Files changed (50) hide show
  1. .gitattributes +15 -0
  2. Embedding.mlmodelc/analytics/coremldata.bin +3 -0
  3. Embedding.mlmodelc/metadata.json +93 -0
  4. Embedding.mlmodelc/model.mil +429 -0
  5. Embedding.mlmodelc/weights/weight.bin +3 -0
  6. FBank.mlmodelc/metadata.json +80 -0
  7. FBank.mlmodelc/model.mil +96 -0
  8. LICENSE +426 -0
  9. NOTICE.md +84 -0
  10. PLDA.mlmodelc/metadata.json +71 -0
  11. PLDA.mlmodelc/model.mil +39 -0
  12. PROVENANCE.md +85 -0
  13. PldaRho.mlmodelc/metadata.json +73 -0
  14. PldaRho.mlmodelc/model.mil +40 -0
  15. README.md +123 -0
  16. Segmentation.mlmodelc/analytics/coremldata.bin +3 -0
  17. Segmentation.mlmodelc/metadata.json +82 -0
  18. Segmentation.mlmodelc/model.mil +219 -0
  19. Segmentation.mlmodelc/weights/weight.bin +3 -0
  20. config.json +1 -0
  21. latency_timeseries.png +3 -0
  22. metrics_timeseries.png +3 -0
  23. mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
  24. mlpackages/Embedding.mlpackage/Manifest.json +18 -0
  25. mlpackages/Fbank.mlpackage/Manifest.json +18 -0
  26. mlpackages/PldaRho.mlpackage/Manifest.json +18 -0
  27. mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
  28. mlpackages/Segmentation.mlpackage/Manifest.json +18 -0
  29. mlpackages/pyannote_segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin +3 -0
  30. mlpackages/pyannote_segmentation.mlpackage/Manifest.json +18 -0
  31. mlpackages/wespeaker.mlpackage/Manifest.json +18 -0
  32. pipeline_mps_timing.png +3 -0
  33. pipeline_overview.png +3 -0
  34. plda-parameters.json +34 -0
  35. plda_coreml.png +3 -0
  36. plda_parity.png +3 -0
  37. provenance.json +294 -0
  38. pyannote_segmentation.mlmodelc/metadata.json +70 -0
  39. pyannote_segmentation.mlmodelc/model.mil +143 -0
  40. wespeaker.mlmodelc/analytics/coremldata.bin +3 -0
  41. wespeaker.mlmodelc/metadata.json +104 -0
  42. wespeaker.mlmodelc/model.mil +0 -0
  43. wespeaker.mlmodelc/weights/weight.bin +3 -0
  44. wespeaker_int8.mlmodelc/metadata.json +104 -0
  45. wespeaker_int8.mlmodelc/model.mil +0 -0
  46. wespeaker_v2.mlmodelc/analytics/coremldata.bin +3 -0
  47. wespeaker_v2.mlmodelc/metadata.json +104 -0
  48. wespeaker_v2.mlmodelc/model.mil +0 -0
  49. wespeaker_v2.mlmodelc/weights/weight.bin +3 -0
  50. xvector-transform.json +0 -0
.gitattributes CHANGED
@@ -33,3 +33,18 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ first_10_seconds.wav filter=lfs diff=lfs merge=lfs -text
37
+ TS3003b_mix_headset.wav filter=lfs diff=lfs merge=lfs -text
38
+ plots/latency_timeseries.png filter=lfs diff=lfs merge=lfs -text
39
+ plots/metrics_timeseries.png filter=lfs diff=lfs merge=lfs -text
40
+ plots/pipeline_overview.png filter=lfs diff=lfs merge=lfs -text
41
+ plots/pipeline_timing.png filter=lfs diff=lfs merge=lfs -text
42
+ plots/plda_parity.png filter=lfs diff=lfs merge=lfs -text
43
+ latency_timeseries.png filter=lfs diff=lfs merge=lfs -text
44
+ metrics_timeseries.png filter=lfs diff=lfs merge=lfs -text
45
+ pipeline_mps_timing.png filter=lfs diff=lfs merge=lfs -text
46
+ pipeline_overview.png filter=lfs diff=lfs merge=lfs -text
47
+ plda_coreml.png filter=lfs diff=lfs merge=lfs -text
48
+ plda_parity.png filter=lfs diff=lfs merge=lfs -text
49
+ plots/pipeline_mps_timing.png filter=lfs diff=lfs merge=lfs -text
50
+ plots/summary_speed.png filter=lfs diff=lfs merge=lfs -text
Embedding.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8d6706436639b53830b4dbe8aaf9c9a843f7f582d63e16f3cb8bb7c6ccd58682
3
+ size 243
Embedding.mlmodelc/metadata.json ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "shortDescription" : "pyannote community-1 speaker embedding backend (WeSpeaker ResNet34 consuming 80×998 FBANK features + 589-frame weights, interpolates weights to 125-frame pooling layer internally)",
4
+ "metadataOutputVersion" : "3.0",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "embedding",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "version" : "pyannote-speaker-diarization-community-1",
18
+ "modelParameters" : [
19
+
20
+ ],
21
+ "author" : "Fluid Inference",
22
+ "specificationVersion" : 8,
23
+ "storagePrecision" : "Float16",
24
+ "license" : "CC-BY-4.0",
25
+ "mlProgramOperationTypeHistogram" : {
26
+ "Ios17.mul" : 4,
27
+ "Ios17.sqrt" : 1,
28
+ "Ios17.sub" : 2,
29
+ "Ios17.conv" : 38,
30
+ "Ios17.concat" : 1,
31
+ "Ios17.clip" : 2,
32
+ "Ios17.add" : 18,
33
+ "Ios17.realDiv" : 4,
34
+ "Ios16.relu" : 33,
35
+ "Ios17.expandDims" : 7,
36
+ "Ios16.reduceSum" : 4,
37
+ "Ios16.reduceL2Norm" : 1,
38
+ "Ios17.squeeze" : 2,
39
+ "Ios17.reshape" : 2,
40
+ "Ios17.cast" : 5
41
+ },
42
+ "computePrecision" : "Mixed (Float16, Float32, Int32)",
43
+ "stateSchema" : [
44
+
45
+ ],
46
+ "isUpdatable" : "0",
47
+ "availability" : {
48
+ "macOS" : "14.0",
49
+ "tvOS" : "17.0",
50
+ "visionOS" : "1.0",
51
+ "watchOS" : "10.0",
52
+ "iOS" : "17.0",
53
+ "macCatalyst" : "17.0"
54
+ },
55
+ "modelType" : {
56
+ "name" : "MLModelType_mlProgram"
57
+ },
58
+ "inputSchema" : [
59
+ {
60
+ "dataType" : "Float32",
61
+ "hasShapeFlexibility" : "1",
62
+ "isOptional" : "0",
63
+ "shapeFlexibility" : "1...32 × 1 × 80 × 998",
64
+ "shapeRange" : "[[1, 32], [1, 1], [80, 80], [998, 998]]",
65
+ "formattedType" : "MultiArray (Float32 1 × 1 × 80 × 998)",
66
+ "type" : "MultiArray",
67
+ "shape" : "[1, 1, 80, 998]",
68
+ "name" : "fbank_features",
69
+ "shortDescription" : ""
70
+ },
71
+ {
72
+ "dataType" : "Float32",
73
+ "hasShapeFlexibility" : "1",
74
+ "isOptional" : "0",
75
+ "shapeFlexibility" : "1...32 × 589",
76
+ "shapeRange" : "[[1, 32], [589, 589]]",
77
+ "formattedType" : "MultiArray (Float32 1 × 589)",
78
+ "type" : "MultiArray",
79
+ "shape" : "[1, 589]",
80
+ "name" : "weights",
81
+ "shortDescription" : ""
82
+ }
83
+ ],
84
+ "userDefinedMetadata" : {
85
+ "com.github.apple.coremltools.conversion_date" : "2025-10-16",
86
+ "com.github.apple.coremltools.source" : "torch==2.8.0",
87
+ "com.github.apple.coremltools.version" : "9.0b1",
88
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
89
+ },
90
+ "generatedClassName" : "embedding_community_1",
91
+ "method" : "predict"
92
+ }
93
+ ]
Embedding.mlmodelc/model.mil ADDED
@@ -0,0 +1,429 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [?, 1, 80, 998]> fbank_features, tensor<fp32, [?, 589]> weights) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, list<tensor<int32, [2]>, ?>>>>((("DefaultShapes", {{"fbank_features", [1, 1, 80, 998]}, {"weights", [1, 589]}}), ("RangeDims", {{"fbank_features", [[1, 32], [1, 1], [80, 80], [998, 998]]}, {"weights", [[1, 32], [589, 589]]}})))] {
5
+ tensor<int32, [1]> weights_1d_axes_0 = const()[name = tensor<string, []>("weights_1d_axes_0"), val = tensor<int32, [1]>([1])];
6
+ tensor<string, []> weights_to_fp16_dtype_0 = const()[name = tensor<string, []>("weights_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
7
+ tensor<fp16, [?, 589]> weights_to_fp16 = cast(dtype = weights_to_fp16_dtype_0, x = weights)[name = tensor<string, []>("cast_14")];
8
+ tensor<fp16, [?, 1, 589]> weights_1d_cast_fp16 = expand_dims(axes = weights_1d_axes_0, x = weights_to_fp16)[name = tensor<string, []>("weights_1d_cast_fp16")];
9
+ tensor<string, []> interpolated_pad_type_0 = const()[name = tensor<string, []>("interpolated_pad_type_0"), val = tensor<string, []>("valid")];
10
+ tensor<int32, [1]> interpolated_strides_0 = const()[name = tensor<string, []>("interpolated_strides_0"), val = tensor<int32, [1]>([1])];
11
+ tensor<int32, [2]> interpolated_pad_0 = const()[name = tensor<string, []>("interpolated_pad_0"), val = tensor<int32, [2]>([0, 0])];
12
+ tensor<int32, [1]> interpolated_dilations_0 = const()[name = tensor<string, []>("interpolated_dilations_0"), val = tensor<int32, [1]>([1])];
13
+ tensor<int32, []> interpolated_groups_0 = const()[name = tensor<string, []>("interpolated_groups_0"), val = tensor<int32, []>(1)];
14
+ tensor<fp16, [125, 1, 589]> const_0_to_fp16 = const()[name = tensor<string, []>("const_0_to_fp16"), val = tensor<fp16, [125, 1, 589]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
15
+ tensor<fp16, [?, 125, 1]> interpolated_cast_fp16 = conv(dilations = interpolated_dilations_0, groups = interpolated_groups_0, pad = interpolated_pad_0, pad_type = interpolated_pad_type_0, strides = interpolated_strides_0, weight = const_0_to_fp16, x = weights_1d_cast_fp16)[name = tensor<string, []>("interpolated_cast_fp16")];
16
+ tensor<int32, [1]> weights_3_axes_0 = const()[name = tensor<string, []>("weights_3_axes_0"), val = tensor<int32, [1]>([-1])];
17
+ tensor<fp16, [?, 125]> weights_3_cast_fp16 = squeeze(axes = weights_3_axes_0, x = interpolated_cast_fp16)[name = tensor<string, []>("weights_3_cast_fp16")];
18
+ tensor<int32, []> var_33 = const()[name = tensor<string, []>("op_33"), val = tensor<int32, []>(-1)];
19
+ tensor<string, []> input_1_pad_type_0 = const()[name = tensor<string, []>("input_1_pad_type_0"), val = tensor<string, []>("custom")];
20
+ tensor<int32, [4]> input_1_pad_0 = const()[name = tensor<string, []>("input_1_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
21
+ tensor<int32, [2]> input_1_strides_0 = const()[name = tensor<string, []>("input_1_strides_0"), val = tensor<int32, [2]>([1, 1])];
22
+ tensor<int32, [2]> input_1_dilations_0 = const()[name = tensor<string, []>("input_1_dilations_0"), val = tensor<int32, [2]>([1, 1])];
23
+ tensor<int32, []> input_1_groups_0 = const()[name = tensor<string, []>("input_1_groups_0"), val = tensor<int32, []>(1)];
24
+ tensor<string, []> fbank_features_to_fp16_dtype_0 = const()[name = tensor<string, []>("fbank_features_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
25
+ tensor<fp16, [32, 1, 3, 3]> const_3_to_fp16 = const()[name = tensor<string, []>("const_3_to_fp16"), val = tensor<fp16, [32, 1, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(147392)))];
26
+ tensor<fp16, [32]> const_4_to_fp16 = const()[name = tensor<string, []>("const_4_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(148032)))];
27
+ tensor<fp16, [?, 1, 80, 998]> fbank_features_to_fp16 = cast(dtype = fbank_features_to_fp16_dtype_0, x = fbank_features)[name = tensor<string, []>("cast_13")];
28
+ tensor<fp16, [?, 32, 80, 998]> input_3_cast_fp16 = conv(bias = const_4_to_fp16, dilations = input_1_dilations_0, groups = input_1_groups_0, pad = input_1_pad_0, pad_type = input_1_pad_type_0, strides = input_1_strides_0, weight = const_3_to_fp16, x = fbank_features_to_fp16)[name = tensor<string, []>("input_3_cast_fp16")];
29
+ tensor<fp16, [?, 32, 80, 998]> input_5_cast_fp16 = relu(x = input_3_cast_fp16)[name = tensor<string, []>("input_5_cast_fp16")];
30
+ tensor<string, []> input_7_pad_type_0 = const()[name = tensor<string, []>("input_7_pad_type_0"), val = tensor<string, []>("custom")];
31
+ tensor<int32, [4]> input_7_pad_0 = const()[name = tensor<string, []>("input_7_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
32
+ tensor<int32, [2]> input_7_strides_0 = const()[name = tensor<string, []>("input_7_strides_0"), val = tensor<int32, [2]>([1, 1])];
33
+ tensor<int32, [2]> input_7_dilations_0 = const()[name = tensor<string, []>("input_7_dilations_0"), val = tensor<int32, [2]>([1, 1])];
34
+ tensor<int32, []> input_7_groups_0 = const()[name = tensor<string, []>("input_7_groups_0"), val = tensor<int32, []>(1)];
35
+ tensor<fp16, [32, 32, 3, 3]> const_5_to_fp16 = const()[name = tensor<string, []>("const_5_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(148160)))];
36
+ tensor<fp16, [32]> const_6_to_fp16 = const()[name = tensor<string, []>("const_6_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(166656)))];
37
+ tensor<fp16, [?, 32, 80, 998]> input_9_cast_fp16 = conv(bias = const_6_to_fp16, dilations = input_7_dilations_0, groups = input_7_groups_0, pad = input_7_pad_0, pad_type = input_7_pad_type_0, strides = input_7_strides_0, weight = const_5_to_fp16, x = input_5_cast_fp16)[name = tensor<string, []>("input_9_cast_fp16")];
38
+ tensor<fp16, [?, 32, 80, 998]> input_11_cast_fp16 = relu(x = input_9_cast_fp16)[name = tensor<string, []>("input_11_cast_fp16")];
39
+ tensor<string, []> input_13_pad_type_0 = const()[name = tensor<string, []>("input_13_pad_type_0"), val = tensor<string, []>("custom")];
40
+ tensor<int32, [4]> input_13_pad_0 = const()[name = tensor<string, []>("input_13_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
41
+ tensor<int32, [2]> input_13_strides_0 = const()[name = tensor<string, []>("input_13_strides_0"), val = tensor<int32, [2]>([1, 1])];
42
+ tensor<int32, [2]> input_13_dilations_0 = const()[name = tensor<string, []>("input_13_dilations_0"), val = tensor<int32, [2]>([1, 1])];
43
+ tensor<int32, []> input_13_groups_0 = const()[name = tensor<string, []>("input_13_groups_0"), val = tensor<int32, []>(1)];
44
+ tensor<fp16, [32, 32, 3, 3]> const_7_to_fp16 = const()[name = tensor<string, []>("const_7_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(166784)))];
45
+ tensor<fp16, [32]> const_8_to_fp16 = const()[name = tensor<string, []>("const_8_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(185280)))];
46
+ tensor<fp16, [?, 32, 80, 998]> out_1_cast_fp16 = conv(bias = const_8_to_fp16, dilations = input_13_dilations_0, groups = input_13_groups_0, pad = input_13_pad_0, pad_type = input_13_pad_type_0, strides = input_13_strides_0, weight = const_7_to_fp16, x = input_11_cast_fp16)[name = tensor<string, []>("out_1_cast_fp16")];
47
+ tensor<fp16, [?, 32, 80, 998]> input_15_cast_fp16 = add(x = out_1_cast_fp16, y = input_5_cast_fp16)[name = tensor<string, []>("input_15_cast_fp16")];
48
+ tensor<fp16, [?, 32, 80, 998]> input_17_cast_fp16 = relu(x = input_15_cast_fp16)[name = tensor<string, []>("input_17_cast_fp16")];
49
+ tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
50
+ tensor<int32, [4]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
51
+ tensor<int32, [2]> input_19_strides_0 = const()[name = tensor<string, []>("input_19_strides_0"), val = tensor<int32, [2]>([1, 1])];
52
+ tensor<int32, [2]> input_19_dilations_0 = const()[name = tensor<string, []>("input_19_dilations_0"), val = tensor<int32, [2]>([1, 1])];
53
+ tensor<int32, []> input_19_groups_0 = const()[name = tensor<string, []>("input_19_groups_0"), val = tensor<int32, []>(1)];
54
+ tensor<fp16, [32, 32, 3, 3]> const_9_to_fp16 = const()[name = tensor<string, []>("const_9_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(185408)))];
55
+ tensor<fp16, [32]> const_10_to_fp16 = const()[name = tensor<string, []>("const_10_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(203904)))];
56
+ tensor<fp16, [?, 32, 80, 998]> input_21_cast_fp16 = conv(bias = const_10_to_fp16, dilations = input_19_dilations_0, groups = input_19_groups_0, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = input_19_strides_0, weight = const_9_to_fp16, x = input_17_cast_fp16)[name = tensor<string, []>("input_21_cast_fp16")];
57
+ tensor<fp16, [?, 32, 80, 998]> input_23_cast_fp16 = relu(x = input_21_cast_fp16)[name = tensor<string, []>("input_23_cast_fp16")];
58
+ tensor<string, []> input_25_pad_type_0 = const()[name = tensor<string, []>("input_25_pad_type_0"), val = tensor<string, []>("custom")];
59
+ tensor<int32, [4]> input_25_pad_0 = const()[name = tensor<string, []>("input_25_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
60
+ tensor<int32, [2]> input_25_strides_0 = const()[name = tensor<string, []>("input_25_strides_0"), val = tensor<int32, [2]>([1, 1])];
61
+ tensor<int32, [2]> input_25_dilations_0 = const()[name = tensor<string, []>("input_25_dilations_0"), val = tensor<int32, [2]>([1, 1])];
62
+ tensor<int32, []> input_25_groups_0 = const()[name = tensor<string, []>("input_25_groups_0"), val = tensor<int32, []>(1)];
63
+ tensor<fp16, [32, 32, 3, 3]> const_11_to_fp16 = const()[name = tensor<string, []>("const_11_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(204032)))];
64
+ tensor<fp16, [32]> const_12_to_fp16 = const()[name = tensor<string, []>("const_12_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(222528)))];
65
+ tensor<fp16, [?, 32, 80, 998]> out_3_cast_fp16 = conv(bias = const_12_to_fp16, dilations = input_25_dilations_0, groups = input_25_groups_0, pad = input_25_pad_0, pad_type = input_25_pad_type_0, strides = input_25_strides_0, weight = const_11_to_fp16, x = input_23_cast_fp16)[name = tensor<string, []>("out_3_cast_fp16")];
66
+ tensor<fp16, [?, 32, 80, 998]> input_27_cast_fp16 = add(x = out_3_cast_fp16, y = input_17_cast_fp16)[name = tensor<string, []>("input_27_cast_fp16")];
67
+ tensor<fp16, [?, 32, 80, 998]> input_29_cast_fp16 = relu(x = input_27_cast_fp16)[name = tensor<string, []>("input_29_cast_fp16")];
68
+ tensor<string, []> input_31_pad_type_0 = const()[name = tensor<string, []>("input_31_pad_type_0"), val = tensor<string, []>("custom")];
69
+ tensor<int32, [4]> input_31_pad_0 = const()[name = tensor<string, []>("input_31_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
70
+ tensor<int32, [2]> input_31_strides_0 = const()[name = tensor<string, []>("input_31_strides_0"), val = tensor<int32, [2]>([1, 1])];
71
+ tensor<int32, [2]> input_31_dilations_0 = const()[name = tensor<string, []>("input_31_dilations_0"), val = tensor<int32, [2]>([1, 1])];
72
+ tensor<int32, []> input_31_groups_0 = const()[name = tensor<string, []>("input_31_groups_0"), val = tensor<int32, []>(1)];
73
+ tensor<fp16, [32, 32, 3, 3]> const_13_to_fp16 = const()[name = tensor<string, []>("const_13_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(222656)))];
74
+ tensor<fp16, [32]> const_14_to_fp16 = const()[name = tensor<string, []>("const_14_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(241152)))];
75
+ tensor<fp16, [?, 32, 80, 998]> input_33_cast_fp16 = conv(bias = const_14_to_fp16, dilations = input_31_dilations_0, groups = input_31_groups_0, pad = input_31_pad_0, pad_type = input_31_pad_type_0, strides = input_31_strides_0, weight = const_13_to_fp16, x = input_29_cast_fp16)[name = tensor<string, []>("input_33_cast_fp16")];
76
+ tensor<fp16, [?, 32, 80, 998]> input_35_cast_fp16 = relu(x = input_33_cast_fp16)[name = tensor<string, []>("input_35_cast_fp16")];
77
+ tensor<string, []> input_37_pad_type_0 = const()[name = tensor<string, []>("input_37_pad_type_0"), val = tensor<string, []>("custom")];
78
+ tensor<int32, [4]> input_37_pad_0 = const()[name = tensor<string, []>("input_37_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
79
+ tensor<int32, [2]> input_37_strides_0 = const()[name = tensor<string, []>("input_37_strides_0"), val = tensor<int32, [2]>([1, 1])];
80
+ tensor<int32, [2]> input_37_dilations_0 = const()[name = tensor<string, []>("input_37_dilations_0"), val = tensor<int32, [2]>([1, 1])];
81
+ tensor<int32, []> input_37_groups_0 = const()[name = tensor<string, []>("input_37_groups_0"), val = tensor<int32, []>(1)];
82
+ tensor<fp16, [32, 32, 3, 3]> const_15_to_fp16 = const()[name = tensor<string, []>("const_15_to_fp16"), val = tensor<fp16, [32, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(241280)))];
83
+ tensor<fp16, [32]> const_16_to_fp16 = const()[name = tensor<string, []>("const_16_to_fp16"), val = tensor<fp16, [32]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(259776)))];
84
+ tensor<fp16, [?, 32, 80, 998]> out_5_cast_fp16 = conv(bias = const_16_to_fp16, dilations = input_37_dilations_0, groups = input_37_groups_0, pad = input_37_pad_0, pad_type = input_37_pad_type_0, strides = input_37_strides_0, weight = const_15_to_fp16, x = input_35_cast_fp16)[name = tensor<string, []>("out_5_cast_fp16")];
85
+ tensor<fp16, [?, 32, 80, 998]> input_39_cast_fp16 = add(x = out_5_cast_fp16, y = input_29_cast_fp16)[name = tensor<string, []>("input_39_cast_fp16")];
86
+ tensor<fp16, [?, 32, 80, 998]> input_41_cast_fp16 = relu(x = input_39_cast_fp16)[name = tensor<string, []>("input_41_cast_fp16")];
87
+ tensor<string, []> input_43_pad_type_0 = const()[name = tensor<string, []>("input_43_pad_type_0"), val = tensor<string, []>("custom")];
88
+ tensor<int32, [4]> input_43_pad_0 = const()[name = tensor<string, []>("input_43_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
89
+ tensor<int32, [2]> input_43_strides_0 = const()[name = tensor<string, []>("input_43_strides_0"), val = tensor<int32, [2]>([2, 2])];
90
+ tensor<int32, [2]> input_43_dilations_0 = const()[name = tensor<string, []>("input_43_dilations_0"), val = tensor<int32, [2]>([1, 1])];
91
+ tensor<int32, []> input_43_groups_0 = const()[name = tensor<string, []>("input_43_groups_0"), val = tensor<int32, []>(1)];
92
+ tensor<fp16, [64, 32, 3, 3]> const_17_to_fp16 = const()[name = tensor<string, []>("const_17_to_fp16"), val = tensor<fp16, [64, 32, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(259904)))];
93
+ tensor<fp16, [64]> const_18_to_fp16 = const()[name = tensor<string, []>("const_18_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(296832)))];
94
+ tensor<fp16, [?, 64, 40, 499]> input_45_cast_fp16 = conv(bias = const_18_to_fp16, dilations = input_43_dilations_0, groups = input_43_groups_0, pad = input_43_pad_0, pad_type = input_43_pad_type_0, strides = input_43_strides_0, weight = const_17_to_fp16, x = input_41_cast_fp16)[name = tensor<string, []>("input_45_cast_fp16")];
95
+ tensor<fp16, [?, 64, 40, 499]> input_47_cast_fp16 = relu(x = input_45_cast_fp16)[name = tensor<string, []>("input_47_cast_fp16")];
96
+ tensor<string, []> input_49_pad_type_0 = const()[name = tensor<string, []>("input_49_pad_type_0"), val = tensor<string, []>("custom")];
97
+ tensor<int32, [4]> input_49_pad_0 = const()[name = tensor<string, []>("input_49_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
98
+ tensor<int32, [2]> input_49_strides_0 = const()[name = tensor<string, []>("input_49_strides_0"), val = tensor<int32, [2]>([1, 1])];
99
+ tensor<int32, [2]> input_49_dilations_0 = const()[name = tensor<string, []>("input_49_dilations_0"), val = tensor<int32, [2]>([1, 1])];
100
+ tensor<int32, []> input_49_groups_0 = const()[name = tensor<string, []>("input_49_groups_0"), val = tensor<int32, []>(1)];
101
+ tensor<fp16, [64, 64, 3, 3]> const_19_to_fp16 = const()[name = tensor<string, []>("const_19_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(297024)))];
102
+ tensor<fp16, [64]> const_20_to_fp16 = const()[name = tensor<string, []>("const_20_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(370816)))];
103
+ tensor<fp16, [?, 64, 40, 499]> out_7_cast_fp16 = conv(bias = const_20_to_fp16, dilations = input_49_dilations_0, groups = input_49_groups_0, pad = input_49_pad_0, pad_type = input_49_pad_type_0, strides = input_49_strides_0, weight = const_19_to_fp16, x = input_47_cast_fp16)[name = tensor<string, []>("out_7_cast_fp16")];
104
+ tensor<string, []> input_51_pad_type_0 = const()[name = tensor<string, []>("input_51_pad_type_0"), val = tensor<string, []>("valid")];
105
+ tensor<int32, [2]> input_51_strides_0 = const()[name = tensor<string, []>("input_51_strides_0"), val = tensor<int32, [2]>([2, 2])];
106
+ tensor<int32, [4]> input_51_pad_0 = const()[name = tensor<string, []>("input_51_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
107
+ tensor<int32, [2]> input_51_dilations_0 = const()[name = tensor<string, []>("input_51_dilations_0"), val = tensor<int32, [2]>([1, 1])];
108
+ tensor<int32, []> input_51_groups_0 = const()[name = tensor<string, []>("input_51_groups_0"), val = tensor<int32, []>(1)];
109
+ tensor<fp16, [64, 32, 1, 1]> const_21_to_fp16 = const()[name = tensor<string, []>("const_21_to_fp16"), val = tensor<fp16, [64, 32, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(371008)))];
110
+ tensor<fp16, [64]> const_22_to_fp16 = const()[name = tensor<string, []>("const_22_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(375168)))];
111
+ tensor<fp16, [?, 64, 40, 499]> var_196_cast_fp16 = conv(bias = const_22_to_fp16, dilations = input_51_dilations_0, groups = input_51_groups_0, pad = input_51_pad_0, pad_type = input_51_pad_type_0, strides = input_51_strides_0, weight = const_21_to_fp16, x = input_41_cast_fp16)[name = tensor<string, []>("op_196_cast_fp16")];
112
+ tensor<fp16, [?, 64, 40, 499]> input_53_cast_fp16 = add(x = out_7_cast_fp16, y = var_196_cast_fp16)[name = tensor<string, []>("input_53_cast_fp16")];
113
+ tensor<fp16, [?, 64, 40, 499]> input_55_cast_fp16 = relu(x = input_53_cast_fp16)[name = tensor<string, []>("input_55_cast_fp16")];
114
+ tensor<string, []> input_57_pad_type_0 = const()[name = tensor<string, []>("input_57_pad_type_0"), val = tensor<string, []>("custom")];
115
+ tensor<int32, [4]> input_57_pad_0 = const()[name = tensor<string, []>("input_57_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
116
+ tensor<int32, [2]> input_57_strides_0 = const()[name = tensor<string, []>("input_57_strides_0"), val = tensor<int32, [2]>([1, 1])];
117
+ tensor<int32, [2]> input_57_dilations_0 = const()[name = tensor<string, []>("input_57_dilations_0"), val = tensor<int32, [2]>([1, 1])];
118
+ tensor<int32, []> input_57_groups_0 = const()[name = tensor<string, []>("input_57_groups_0"), val = tensor<int32, []>(1)];
119
+ tensor<fp16, [64, 64, 3, 3]> const_23_to_fp16 = const()[name = tensor<string, []>("const_23_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(375360)))];
120
+ tensor<fp16, [64]> const_24_to_fp16 = const()[name = tensor<string, []>("const_24_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(449152)))];
121
+ tensor<fp16, [?, 64, 40, 499]> input_59_cast_fp16 = conv(bias = const_24_to_fp16, dilations = input_57_dilations_0, groups = input_57_groups_0, pad = input_57_pad_0, pad_type = input_57_pad_type_0, strides = input_57_strides_0, weight = const_23_to_fp16, x = input_55_cast_fp16)[name = tensor<string, []>("input_59_cast_fp16")];
122
+ tensor<fp16, [?, 64, 40, 499]> input_61_cast_fp16 = relu(x = input_59_cast_fp16)[name = tensor<string, []>("input_61_cast_fp16")];
123
+ tensor<string, []> input_63_pad_type_0 = const()[name = tensor<string, []>("input_63_pad_type_0"), val = tensor<string, []>("custom")];
124
+ tensor<int32, [4]> input_63_pad_0 = const()[name = tensor<string, []>("input_63_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
125
+ tensor<int32, [2]> input_63_strides_0 = const()[name = tensor<string, []>("input_63_strides_0"), val = tensor<int32, [2]>([1, 1])];
126
+ tensor<int32, [2]> input_63_dilations_0 = const()[name = tensor<string, []>("input_63_dilations_0"), val = tensor<int32, [2]>([1, 1])];
127
+ tensor<int32, []> input_63_groups_0 = const()[name = tensor<string, []>("input_63_groups_0"), val = tensor<int32, []>(1)];
128
+ tensor<fp16, [64, 64, 3, 3]> const_25_to_fp16 = const()[name = tensor<string, []>("const_25_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(449344)))];
129
+ tensor<fp16, [64]> const_26_to_fp16 = const()[name = tensor<string, []>("const_26_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(523136)))];
130
+ tensor<fp16, [?, 64, 40, 499]> out_9_cast_fp16 = conv(bias = const_26_to_fp16, dilations = input_63_dilations_0, groups = input_63_groups_0, pad = input_63_pad_0, pad_type = input_63_pad_type_0, strides = input_63_strides_0, weight = const_25_to_fp16, x = input_61_cast_fp16)[name = tensor<string, []>("out_9_cast_fp16")];
131
+ tensor<fp16, [?, 64, 40, 499]> input_65_cast_fp16 = add(x = out_9_cast_fp16, y = input_55_cast_fp16)[name = tensor<string, []>("input_65_cast_fp16")];
132
+ tensor<fp16, [?, 64, 40, 499]> input_67_cast_fp16 = relu(x = input_65_cast_fp16)[name = tensor<string, []>("input_67_cast_fp16")];
133
+ tensor<string, []> input_69_pad_type_0 = const()[name = tensor<string, []>("input_69_pad_type_0"), val = tensor<string, []>("custom")];
134
+ tensor<int32, [4]> input_69_pad_0 = const()[name = tensor<string, []>("input_69_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
135
+ tensor<int32, [2]> input_69_strides_0 = const()[name = tensor<string, []>("input_69_strides_0"), val = tensor<int32, [2]>([1, 1])];
136
+ tensor<int32, [2]> input_69_dilations_0 = const()[name = tensor<string, []>("input_69_dilations_0"), val = tensor<int32, [2]>([1, 1])];
137
+ tensor<int32, []> input_69_groups_0 = const()[name = tensor<string, []>("input_69_groups_0"), val = tensor<int32, []>(1)];
138
+ tensor<fp16, [64, 64, 3, 3]> const_27_to_fp16 = const()[name = tensor<string, []>("const_27_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(523328)))];
139
+ tensor<fp16, [64]> const_28_to_fp16 = const()[name = tensor<string, []>("const_28_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(597120)))];
140
+ tensor<fp16, [?, 64, 40, 499]> input_71_cast_fp16 = conv(bias = const_28_to_fp16, dilations = input_69_dilations_0, groups = input_69_groups_0, pad = input_69_pad_0, pad_type = input_69_pad_type_0, strides = input_69_strides_0, weight = const_27_to_fp16, x = input_67_cast_fp16)[name = tensor<string, []>("input_71_cast_fp16")];
141
+ tensor<fp16, [?, 64, 40, 499]> input_73_cast_fp16 = relu(x = input_71_cast_fp16)[name = tensor<string, []>("input_73_cast_fp16")];
142
+ tensor<string, []> input_75_pad_type_0 = const()[name = tensor<string, []>("input_75_pad_type_0"), val = tensor<string, []>("custom")];
143
+ tensor<int32, [4]> input_75_pad_0 = const()[name = tensor<string, []>("input_75_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
144
+ tensor<int32, [2]> input_75_strides_0 = const()[name = tensor<string, []>("input_75_strides_0"), val = tensor<int32, [2]>([1, 1])];
145
+ tensor<int32, [2]> input_75_dilations_0 = const()[name = tensor<string, []>("input_75_dilations_0"), val = tensor<int32, [2]>([1, 1])];
146
+ tensor<int32, []> input_75_groups_0 = const()[name = tensor<string, []>("input_75_groups_0"), val = tensor<int32, []>(1)];
147
+ tensor<fp16, [64, 64, 3, 3]> const_29_to_fp16 = const()[name = tensor<string, []>("const_29_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(597312)))];
148
+ tensor<fp16, [64]> const_30_to_fp16 = const()[name = tensor<string, []>("const_30_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(671104)))];
149
+ tensor<fp16, [?, 64, 40, 499]> out_11_cast_fp16 = conv(bias = const_30_to_fp16, dilations = input_75_dilations_0, groups = input_75_groups_0, pad = input_75_pad_0, pad_type = input_75_pad_type_0, strides = input_75_strides_0, weight = const_29_to_fp16, x = input_73_cast_fp16)[name = tensor<string, []>("out_11_cast_fp16")];
150
+ tensor<fp16, [?, 64, 40, 499]> input_77_cast_fp16 = add(x = out_11_cast_fp16, y = input_67_cast_fp16)[name = tensor<string, []>("input_77_cast_fp16")];
151
+ tensor<fp16, [?, 64, 40, 499]> input_79_cast_fp16 = relu(x = input_77_cast_fp16)[name = tensor<string, []>("input_79_cast_fp16")];
152
+ tensor<string, []> input_81_pad_type_0 = const()[name = tensor<string, []>("input_81_pad_type_0"), val = tensor<string, []>("custom")];
153
+ tensor<int32, [4]> input_81_pad_0 = const()[name = tensor<string, []>("input_81_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
154
+ tensor<int32, [2]> input_81_strides_0 = const()[name = tensor<string, []>("input_81_strides_0"), val = tensor<int32, [2]>([1, 1])];
155
+ tensor<int32, [2]> input_81_dilations_0 = const()[name = tensor<string, []>("input_81_dilations_0"), val = tensor<int32, [2]>([1, 1])];
156
+ tensor<int32, []> input_81_groups_0 = const()[name = tensor<string, []>("input_81_groups_0"), val = tensor<int32, []>(1)];
157
+ tensor<fp16, [64, 64, 3, 3]> const_31_to_fp16 = const()[name = tensor<string, []>("const_31_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(671296)))];
158
+ tensor<fp16, [64]> const_32_to_fp16 = const()[name = tensor<string, []>("const_32_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(745088)))];
159
+ tensor<fp16, [?, 64, 40, 499]> input_83_cast_fp16 = conv(bias = const_32_to_fp16, dilations = input_81_dilations_0, groups = input_81_groups_0, pad = input_81_pad_0, pad_type = input_81_pad_type_0, strides = input_81_strides_0, weight = const_31_to_fp16, x = input_79_cast_fp16)[name = tensor<string, []>("input_83_cast_fp16")];
160
+ tensor<fp16, [?, 64, 40, 499]> input_85_cast_fp16 = relu(x = input_83_cast_fp16)[name = tensor<string, []>("input_85_cast_fp16")];
161
+ tensor<string, []> input_87_pad_type_0 = const()[name = tensor<string, []>("input_87_pad_type_0"), val = tensor<string, []>("custom")];
162
+ tensor<int32, [4]> input_87_pad_0 = const()[name = tensor<string, []>("input_87_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
163
+ tensor<int32, [2]> input_87_strides_0 = const()[name = tensor<string, []>("input_87_strides_0"), val = tensor<int32, [2]>([1, 1])];
164
+ tensor<int32, [2]> input_87_dilations_0 = const()[name = tensor<string, []>("input_87_dilations_0"), val = tensor<int32, [2]>([1, 1])];
165
+ tensor<int32, []> input_87_groups_0 = const()[name = tensor<string, []>("input_87_groups_0"), val = tensor<int32, []>(1)];
166
+ tensor<fp16, [64, 64, 3, 3]> const_33_to_fp16 = const()[name = tensor<string, []>("const_33_to_fp16"), val = tensor<fp16, [64, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(745280)))];
167
+ tensor<fp16, [64]> const_34_to_fp16 = const()[name = tensor<string, []>("const_34_to_fp16"), val = tensor<fp16, [64]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(819072)))];
168
+ tensor<fp16, [?, 64, 40, 499]> out_13_cast_fp16 = conv(bias = const_34_to_fp16, dilations = input_87_dilations_0, groups = input_87_groups_0, pad = input_87_pad_0, pad_type = input_87_pad_type_0, strides = input_87_strides_0, weight = const_33_to_fp16, x = input_85_cast_fp16)[name = tensor<string, []>("out_13_cast_fp16")];
169
+ tensor<fp16, [?, 64, 40, 499]> input_89_cast_fp16 = add(x = out_13_cast_fp16, y = input_79_cast_fp16)[name = tensor<string, []>("input_89_cast_fp16")];
170
+ tensor<fp16, [?, 64, 40, 499]> input_91_cast_fp16 = relu(x = input_89_cast_fp16)[name = tensor<string, []>("input_91_cast_fp16")];
171
+ tensor<string, []> input_93_pad_type_0 = const()[name = tensor<string, []>("input_93_pad_type_0"), val = tensor<string, []>("custom")];
172
+ tensor<int32, [4]> input_93_pad_0 = const()[name = tensor<string, []>("input_93_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
173
+ tensor<int32, [2]> input_93_strides_0 = const()[name = tensor<string, []>("input_93_strides_0"), val = tensor<int32, [2]>([2, 2])];
174
+ tensor<int32, [2]> input_93_dilations_0 = const()[name = tensor<string, []>("input_93_dilations_0"), val = tensor<int32, [2]>([1, 1])];
175
+ tensor<int32, []> input_93_groups_0 = const()[name = tensor<string, []>("input_93_groups_0"), val = tensor<int32, []>(1)];
176
+ tensor<fp16, [128, 64, 3, 3]> const_35_to_fp16 = const()[name = tensor<string, []>("const_35_to_fp16"), val = tensor<fp16, [128, 64, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(819264)))];
177
+ tensor<fp16, [128]> const_36_to_fp16 = const()[name = tensor<string, []>("const_36_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(966784)))];
178
+ tensor<fp16, [?, 128, 20, 250]> input_95_cast_fp16 = conv(bias = const_36_to_fp16, dilations = input_93_dilations_0, groups = input_93_groups_0, pad = input_93_pad_0, pad_type = input_93_pad_type_0, strides = input_93_strides_0, weight = const_35_to_fp16, x = input_91_cast_fp16)[name = tensor<string, []>("input_95_cast_fp16")];
179
+ tensor<fp16, [?, 128, 20, 250]> input_97_cast_fp16 = relu(x = input_95_cast_fp16)[name = tensor<string, []>("input_97_cast_fp16")];
180
+ tensor<string, []> input_99_pad_type_0 = const()[name = tensor<string, []>("input_99_pad_type_0"), val = tensor<string, []>("custom")];
181
+ tensor<int32, [4]> input_99_pad_0 = const()[name = tensor<string, []>("input_99_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
182
+ tensor<int32, [2]> input_99_strides_0 = const()[name = tensor<string, []>("input_99_strides_0"), val = tensor<int32, [2]>([1, 1])];
183
+ tensor<int32, [2]> input_99_dilations_0 = const()[name = tensor<string, []>("input_99_dilations_0"), val = tensor<int32, [2]>([1, 1])];
184
+ tensor<int32, []> input_99_groups_0 = const()[name = tensor<string, []>("input_99_groups_0"), val = tensor<int32, []>(1)];
185
+ tensor<fp16, [128, 128, 3, 3]> const_37_to_fp16 = const()[name = tensor<string, []>("const_37_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(967104)))];
186
+ tensor<fp16, [128]> const_38_to_fp16 = const()[name = tensor<string, []>("const_38_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1262080)))];
187
+ tensor<fp16, [?, 128, 20, 250]> out_15_cast_fp16 = conv(bias = const_38_to_fp16, dilations = input_99_dilations_0, groups = input_99_groups_0, pad = input_99_pad_0, pad_type = input_99_pad_type_0, strides = input_99_strides_0, weight = const_37_to_fp16, x = input_97_cast_fp16)[name = tensor<string, []>("out_15_cast_fp16")];
188
+ tensor<string, []> input_101_pad_type_0 = const()[name = tensor<string, []>("input_101_pad_type_0"), val = tensor<string, []>("valid")];
189
+ tensor<int32, [2]> input_101_strides_0 = const()[name = tensor<string, []>("input_101_strides_0"), val = tensor<int32, [2]>([2, 2])];
190
+ tensor<int32, [4]> input_101_pad_0 = const()[name = tensor<string, []>("input_101_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
191
+ tensor<int32, [2]> input_101_dilations_0 = const()[name = tensor<string, []>("input_101_dilations_0"), val = tensor<int32, [2]>([1, 1])];
192
+ tensor<int32, []> input_101_groups_0 = const()[name = tensor<string, []>("input_101_groups_0"), val = tensor<int32, []>(1)];
193
+ tensor<fp16, [128, 64, 1, 1]> const_39_to_fp16 = const()[name = tensor<string, []>("const_39_to_fp16"), val = tensor<fp16, [128, 64, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1262400)))];
194
+ tensor<fp16, [128]> const_40_to_fp16 = const()[name = tensor<string, []>("const_40_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1278848)))];
195
+ tensor<fp16, [?, 128, 20, 250]> var_332_cast_fp16 = conv(bias = const_40_to_fp16, dilations = input_101_dilations_0, groups = input_101_groups_0, pad = input_101_pad_0, pad_type = input_101_pad_type_0, strides = input_101_strides_0, weight = const_39_to_fp16, x = input_91_cast_fp16)[name = tensor<string, []>("op_332_cast_fp16")];
196
+ tensor<fp16, [?, 128, 20, 250]> input_103_cast_fp16 = add(x = out_15_cast_fp16, y = var_332_cast_fp16)[name = tensor<string, []>("input_103_cast_fp16")];
197
+ tensor<fp16, [?, 128, 20, 250]> input_105_cast_fp16 = relu(x = input_103_cast_fp16)[name = tensor<string, []>("input_105_cast_fp16")];
198
+ tensor<string, []> input_107_pad_type_0 = const()[name = tensor<string, []>("input_107_pad_type_0"), val = tensor<string, []>("custom")];
199
+ tensor<int32, [4]> input_107_pad_0 = const()[name = tensor<string, []>("input_107_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
200
+ tensor<int32, [2]> input_107_strides_0 = const()[name = tensor<string, []>("input_107_strides_0"), val = tensor<int32, [2]>([1, 1])];
201
+ tensor<int32, [2]> input_107_dilations_0 = const()[name = tensor<string, []>("input_107_dilations_0"), val = tensor<int32, [2]>([1, 1])];
202
+ tensor<int32, []> input_107_groups_0 = const()[name = tensor<string, []>("input_107_groups_0"), val = tensor<int32, []>(1)];
203
+ tensor<fp16, [128, 128, 3, 3]> const_41_to_fp16 = const()[name = tensor<string, []>("const_41_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1279168)))];
204
+ tensor<fp16, [128]> const_42_to_fp16 = const()[name = tensor<string, []>("const_42_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1574144)))];
205
+ tensor<fp16, [?, 128, 20, 250]> input_109_cast_fp16 = conv(bias = const_42_to_fp16, dilations = input_107_dilations_0, groups = input_107_groups_0, pad = input_107_pad_0, pad_type = input_107_pad_type_0, strides = input_107_strides_0, weight = const_41_to_fp16, x = input_105_cast_fp16)[name = tensor<string, []>("input_109_cast_fp16")];
206
+ tensor<fp16, [?, 128, 20, 250]> input_111_cast_fp16 = relu(x = input_109_cast_fp16)[name = tensor<string, []>("input_111_cast_fp16")];
207
+ tensor<string, []> input_113_pad_type_0 = const()[name = tensor<string, []>("input_113_pad_type_0"), val = tensor<string, []>("custom")];
208
+ tensor<int32, [4]> input_113_pad_0 = const()[name = tensor<string, []>("input_113_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
209
+ tensor<int32, [2]> input_113_strides_0 = const()[name = tensor<string, []>("input_113_strides_0"), val = tensor<int32, [2]>([1, 1])];
210
+ tensor<int32, [2]> input_113_dilations_0 = const()[name = tensor<string, []>("input_113_dilations_0"), val = tensor<int32, [2]>([1, 1])];
211
+ tensor<int32, []> input_113_groups_0 = const()[name = tensor<string, []>("input_113_groups_0"), val = tensor<int32, []>(1)];
212
+ tensor<fp16, [128, 128, 3, 3]> const_43_to_fp16 = const()[name = tensor<string, []>("const_43_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1574464)))];
213
+ tensor<fp16, [128]> const_44_to_fp16 = const()[name = tensor<string, []>("const_44_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1869440)))];
214
+ tensor<fp16, [?, 128, 20, 250]> out_17_cast_fp16 = conv(bias = const_44_to_fp16, dilations = input_113_dilations_0, groups = input_113_groups_0, pad = input_113_pad_0, pad_type = input_113_pad_type_0, strides = input_113_strides_0, weight = const_43_to_fp16, x = input_111_cast_fp16)[name = tensor<string, []>("out_17_cast_fp16")];
215
+ tensor<fp16, [?, 128, 20, 250]> input_115_cast_fp16 = add(x = out_17_cast_fp16, y = input_105_cast_fp16)[name = tensor<string, []>("input_115_cast_fp16")];
216
+ tensor<fp16, [?, 128, 20, 250]> input_117_cast_fp16 = relu(x = input_115_cast_fp16)[name = tensor<string, []>("input_117_cast_fp16")];
217
+ tensor<string, []> input_119_pad_type_0 = const()[name = tensor<string, []>("input_119_pad_type_0"), val = tensor<string, []>("custom")];
218
+ tensor<int32, [4]> input_119_pad_0 = const()[name = tensor<string, []>("input_119_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
219
+ tensor<int32, [2]> input_119_strides_0 = const()[name = tensor<string, []>("input_119_strides_0"), val = tensor<int32, [2]>([1, 1])];
220
+ tensor<int32, [2]> input_119_dilations_0 = const()[name = tensor<string, []>("input_119_dilations_0"), val = tensor<int32, [2]>([1, 1])];
221
+ tensor<int32, []> input_119_groups_0 = const()[name = tensor<string, []>("input_119_groups_0"), val = tensor<int32, []>(1)];
222
+ tensor<fp16, [128, 128, 3, 3]> const_45_to_fp16 = const()[name = tensor<string, []>("const_45_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1869760)))];
223
+ tensor<fp16, [128]> const_46_to_fp16 = const()[name = tensor<string, []>("const_46_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2164736)))];
224
+ tensor<fp16, [?, 128, 20, 250]> input_121_cast_fp16 = conv(bias = const_46_to_fp16, dilations = input_119_dilations_0, groups = input_119_groups_0, pad = input_119_pad_0, pad_type = input_119_pad_type_0, strides = input_119_strides_0, weight = const_45_to_fp16, x = input_117_cast_fp16)[name = tensor<string, []>("input_121_cast_fp16")];
225
+ tensor<fp16, [?, 128, 20, 250]> input_123_cast_fp16 = relu(x = input_121_cast_fp16)[name = tensor<string, []>("input_123_cast_fp16")];
226
+ tensor<string, []> input_125_pad_type_0 = const()[name = tensor<string, []>("input_125_pad_type_0"), val = tensor<string, []>("custom")];
227
+ tensor<int32, [4]> input_125_pad_0 = const()[name = tensor<string, []>("input_125_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
228
+ tensor<int32, [2]> input_125_strides_0 = const()[name = tensor<string, []>("input_125_strides_0"), val = tensor<int32, [2]>([1, 1])];
229
+ tensor<int32, [2]> input_125_dilations_0 = const()[name = tensor<string, []>("input_125_dilations_0"), val = tensor<int32, [2]>([1, 1])];
230
+ tensor<int32, []> input_125_groups_0 = const()[name = tensor<string, []>("input_125_groups_0"), val = tensor<int32, []>(1)];
231
+ tensor<fp16, [128, 128, 3, 3]> const_47_to_fp16 = const()[name = tensor<string, []>("const_47_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2165056)))];
232
+ tensor<fp16, [128]> const_48_to_fp16 = const()[name = tensor<string, []>("const_48_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2460032)))];
233
+ tensor<fp16, [?, 128, 20, 250]> out_19_cast_fp16 = conv(bias = const_48_to_fp16, dilations = input_125_dilations_0, groups = input_125_groups_0, pad = input_125_pad_0, pad_type = input_125_pad_type_0, strides = input_125_strides_0, weight = const_47_to_fp16, x = input_123_cast_fp16)[name = tensor<string, []>("out_19_cast_fp16")];
234
+ tensor<fp16, [?, 128, 20, 250]> input_127_cast_fp16 = add(x = out_19_cast_fp16, y = input_117_cast_fp16)[name = tensor<string, []>("input_127_cast_fp16")];
235
+ tensor<fp16, [?, 128, 20, 250]> input_129_cast_fp16 = relu(x = input_127_cast_fp16)[name = tensor<string, []>("input_129_cast_fp16")];
236
+ tensor<string, []> input_131_pad_type_0 = const()[name = tensor<string, []>("input_131_pad_type_0"), val = tensor<string, []>("custom")];
237
+ tensor<int32, [4]> input_131_pad_0 = const()[name = tensor<string, []>("input_131_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
238
+ tensor<int32, [2]> input_131_strides_0 = const()[name = tensor<string, []>("input_131_strides_0"), val = tensor<int32, [2]>([1, 1])];
239
+ tensor<int32, [2]> input_131_dilations_0 = const()[name = tensor<string, []>("input_131_dilations_0"), val = tensor<int32, [2]>([1, 1])];
240
+ tensor<int32, []> input_131_groups_0 = const()[name = tensor<string, []>("input_131_groups_0"), val = tensor<int32, []>(1)];
241
+ tensor<fp16, [128, 128, 3, 3]> const_49_to_fp16 = const()[name = tensor<string, []>("const_49_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2460352)))];
242
+ tensor<fp16, [128]> const_50_to_fp16 = const()[name = tensor<string, []>("const_50_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2755328)))];
243
+ tensor<fp16, [?, 128, 20, 250]> input_133_cast_fp16 = conv(bias = const_50_to_fp16, dilations = input_131_dilations_0, groups = input_131_groups_0, pad = input_131_pad_0, pad_type = input_131_pad_type_0, strides = input_131_strides_0, weight = const_49_to_fp16, x = input_129_cast_fp16)[name = tensor<string, []>("input_133_cast_fp16")];
244
+ tensor<fp16, [?, 128, 20, 250]> input_135_cast_fp16 = relu(x = input_133_cast_fp16)[name = tensor<string, []>("input_135_cast_fp16")];
245
+ tensor<string, []> input_137_pad_type_0 = const()[name = tensor<string, []>("input_137_pad_type_0"), val = tensor<string, []>("custom")];
246
+ tensor<int32, [4]> input_137_pad_0 = const()[name = tensor<string, []>("input_137_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
247
+ tensor<int32, [2]> input_137_strides_0 = const()[name = tensor<string, []>("input_137_strides_0"), val = tensor<int32, [2]>([1, 1])];
248
+ tensor<int32, [2]> input_137_dilations_0 = const()[name = tensor<string, []>("input_137_dilations_0"), val = tensor<int32, [2]>([1, 1])];
249
+ tensor<int32, []> input_137_groups_0 = const()[name = tensor<string, []>("input_137_groups_0"), val = tensor<int32, []>(1)];
250
+ tensor<fp16, [128, 128, 3, 3]> const_51_to_fp16 = const()[name = tensor<string, []>("const_51_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2755648)))];
251
+ tensor<fp16, [128]> const_52_to_fp16 = const()[name = tensor<string, []>("const_52_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3050624)))];
252
+ tensor<fp16, [?, 128, 20, 250]> out_21_cast_fp16 = conv(bias = const_52_to_fp16, dilations = input_137_dilations_0, groups = input_137_groups_0, pad = input_137_pad_0, pad_type = input_137_pad_type_0, strides = input_137_strides_0, weight = const_51_to_fp16, x = input_135_cast_fp16)[name = tensor<string, []>("out_21_cast_fp16")];
253
+ tensor<fp16, [?, 128, 20, 250]> input_139_cast_fp16 = add(x = out_21_cast_fp16, y = input_129_cast_fp16)[name = tensor<string, []>("input_139_cast_fp16")];
254
+ tensor<fp16, [?, 128, 20, 250]> input_141_cast_fp16 = relu(x = input_139_cast_fp16)[name = tensor<string, []>("input_141_cast_fp16")];
255
+ tensor<string, []> input_143_pad_type_0 = const()[name = tensor<string, []>("input_143_pad_type_0"), val = tensor<string, []>("custom")];
256
+ tensor<int32, [4]> input_143_pad_0 = const()[name = tensor<string, []>("input_143_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
257
+ tensor<int32, [2]> input_143_strides_0 = const()[name = tensor<string, []>("input_143_strides_0"), val = tensor<int32, [2]>([1, 1])];
258
+ tensor<int32, [2]> input_143_dilations_0 = const()[name = tensor<string, []>("input_143_dilations_0"), val = tensor<int32, [2]>([1, 1])];
259
+ tensor<int32, []> input_143_groups_0 = const()[name = tensor<string, []>("input_143_groups_0"), val = tensor<int32, []>(1)];
260
+ tensor<fp16, [128, 128, 3, 3]> const_53_to_fp16 = const()[name = tensor<string, []>("const_53_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3050944)))];
261
+ tensor<fp16, [128]> const_54_to_fp16 = const()[name = tensor<string, []>("const_54_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3345920)))];
262
+ tensor<fp16, [?, 128, 20, 250]> input_145_cast_fp16 = conv(bias = const_54_to_fp16, dilations = input_143_dilations_0, groups = input_143_groups_0, pad = input_143_pad_0, pad_type = input_143_pad_type_0, strides = input_143_strides_0, weight = const_53_to_fp16, x = input_141_cast_fp16)[name = tensor<string, []>("input_145_cast_fp16")];
263
+ tensor<fp16, [?, 128, 20, 250]> input_147_cast_fp16 = relu(x = input_145_cast_fp16)[name = tensor<string, []>("input_147_cast_fp16")];
264
+ tensor<string, []> input_149_pad_type_0 = const()[name = tensor<string, []>("input_149_pad_type_0"), val = tensor<string, []>("custom")];
265
+ tensor<int32, [4]> input_149_pad_0 = const()[name = tensor<string, []>("input_149_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
266
+ tensor<int32, [2]> input_149_strides_0 = const()[name = tensor<string, []>("input_149_strides_0"), val = tensor<int32, [2]>([1, 1])];
267
+ tensor<int32, [2]> input_149_dilations_0 = const()[name = tensor<string, []>("input_149_dilations_0"), val = tensor<int32, [2]>([1, 1])];
268
+ tensor<int32, []> input_149_groups_0 = const()[name = tensor<string, []>("input_149_groups_0"), val = tensor<int32, []>(1)];
269
+ tensor<fp16, [128, 128, 3, 3]> const_55_to_fp16 = const()[name = tensor<string, []>("const_55_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3346240)))];
270
+ tensor<fp16, [128]> const_56_to_fp16 = const()[name = tensor<string, []>("const_56_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3641216)))];
271
+ tensor<fp16, [?, 128, 20, 250]> out_23_cast_fp16 = conv(bias = const_56_to_fp16, dilations = input_149_dilations_0, groups = input_149_groups_0, pad = input_149_pad_0, pad_type = input_149_pad_type_0, strides = input_149_strides_0, weight = const_55_to_fp16, x = input_147_cast_fp16)[name = tensor<string, []>("out_23_cast_fp16")];
272
+ tensor<fp16, [?, 128, 20, 250]> input_151_cast_fp16 = add(x = out_23_cast_fp16, y = input_141_cast_fp16)[name = tensor<string, []>("input_151_cast_fp16")];
273
+ tensor<fp16, [?, 128, 20, 250]> input_153_cast_fp16 = relu(x = input_151_cast_fp16)[name = tensor<string, []>("input_153_cast_fp16")];
274
+ tensor<string, []> input_155_pad_type_0 = const()[name = tensor<string, []>("input_155_pad_type_0"), val = tensor<string, []>("custom")];
275
+ tensor<int32, [4]> input_155_pad_0 = const()[name = tensor<string, []>("input_155_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
276
+ tensor<int32, [2]> input_155_strides_0 = const()[name = tensor<string, []>("input_155_strides_0"), val = tensor<int32, [2]>([1, 1])];
277
+ tensor<int32, [2]> input_155_dilations_0 = const()[name = tensor<string, []>("input_155_dilations_0"), val = tensor<int32, [2]>([1, 1])];
278
+ tensor<int32, []> input_155_groups_0 = const()[name = tensor<string, []>("input_155_groups_0"), val = tensor<int32, []>(1)];
279
+ tensor<fp16, [128, 128, 3, 3]> const_57_to_fp16 = const()[name = tensor<string, []>("const_57_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3641536)))];
280
+ tensor<fp16, [128]> const_58_to_fp16 = const()[name = tensor<string, []>("const_58_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3936512)))];
281
+ tensor<fp16, [?, 128, 20, 250]> input_157_cast_fp16 = conv(bias = const_58_to_fp16, dilations = input_155_dilations_0, groups = input_155_groups_0, pad = input_155_pad_0, pad_type = input_155_pad_type_0, strides = input_155_strides_0, weight = const_57_to_fp16, x = input_153_cast_fp16)[name = tensor<string, []>("input_157_cast_fp16")];
282
+ tensor<fp16, [?, 128, 20, 250]> input_159_cast_fp16 = relu(x = input_157_cast_fp16)[name = tensor<string, []>("input_159_cast_fp16")];
283
+ tensor<string, []> input_161_pad_type_0 = const()[name = tensor<string, []>("input_161_pad_type_0"), val = tensor<string, []>("custom")];
284
+ tensor<int32, [4]> input_161_pad_0 = const()[name = tensor<string, []>("input_161_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
285
+ tensor<int32, [2]> input_161_strides_0 = const()[name = tensor<string, []>("input_161_strides_0"), val = tensor<int32, [2]>([1, 1])];
286
+ tensor<int32, [2]> input_161_dilations_0 = const()[name = tensor<string, []>("input_161_dilations_0"), val = tensor<int32, [2]>([1, 1])];
287
+ tensor<int32, []> input_161_groups_0 = const()[name = tensor<string, []>("input_161_groups_0"), val = tensor<int32, []>(1)];
288
+ tensor<fp16, [128, 128, 3, 3]> const_59_to_fp16 = const()[name = tensor<string, []>("const_59_to_fp16"), val = tensor<fp16, [128, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3936832)))];
289
+ tensor<fp16, [128]> const_60_to_fp16 = const()[name = tensor<string, []>("const_60_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4231808)))];
290
+ tensor<fp16, [?, 128, 20, 250]> out_25_cast_fp16 = conv(bias = const_60_to_fp16, dilations = input_161_dilations_0, groups = input_161_groups_0, pad = input_161_pad_0, pad_type = input_161_pad_type_0, strides = input_161_strides_0, weight = const_59_to_fp16, x = input_159_cast_fp16)[name = tensor<string, []>("out_25_cast_fp16")];
291
+ tensor<fp16, [?, 128, 20, 250]> input_163_cast_fp16 = add(x = out_25_cast_fp16, y = input_153_cast_fp16)[name = tensor<string, []>("input_163_cast_fp16")];
292
+ tensor<fp16, [?, 128, 20, 250]> input_165_cast_fp16 = relu(x = input_163_cast_fp16)[name = tensor<string, []>("input_165_cast_fp16")];
293
+ tensor<string, []> input_167_pad_type_0 = const()[name = tensor<string, []>("input_167_pad_type_0"), val = tensor<string, []>("custom")];
294
+ tensor<int32, [4]> input_167_pad_0 = const()[name = tensor<string, []>("input_167_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
295
+ tensor<int32, [2]> input_167_strides_0 = const()[name = tensor<string, []>("input_167_strides_0"), val = tensor<int32, [2]>([2, 2])];
296
+ tensor<int32, [2]> input_167_dilations_0 = const()[name = tensor<string, []>("input_167_dilations_0"), val = tensor<int32, [2]>([1, 1])];
297
+ tensor<int32, []> input_167_groups_0 = const()[name = tensor<string, []>("input_167_groups_0"), val = tensor<int32, []>(1)];
298
+ tensor<fp16, [256, 128, 3, 3]> const_61_to_fp16 = const()[name = tensor<string, []>("const_61_to_fp16"), val = tensor<fp16, [256, 128, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4232128)))];
299
+ tensor<fp16, [256]> const_62_to_fp16 = const()[name = tensor<string, []>("const_62_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4822016)))];
300
+ tensor<fp16, [?, 256, 10, 125]> input_169_cast_fp16 = conv(bias = const_62_to_fp16, dilations = input_167_dilations_0, groups = input_167_groups_0, pad = input_167_pad_0, pad_type = input_167_pad_type_0, strides = input_167_strides_0, weight = const_61_to_fp16, x = input_165_cast_fp16)[name = tensor<string, []>("input_169_cast_fp16")];
301
+ tensor<fp16, [?, 256, 10, 125]> input_171_cast_fp16 = relu(x = input_169_cast_fp16)[name = tensor<string, []>("input_171_cast_fp16")];
302
+ tensor<string, []> input_173_pad_type_0 = const()[name = tensor<string, []>("input_173_pad_type_0"), val = tensor<string, []>("custom")];
303
+ tensor<int32, [4]> input_173_pad_0 = const()[name = tensor<string, []>("input_173_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
304
+ tensor<int32, [2]> input_173_strides_0 = const()[name = tensor<string, []>("input_173_strides_0"), val = tensor<int32, [2]>([1, 1])];
305
+ tensor<int32, [2]> input_173_dilations_0 = const()[name = tensor<string, []>("input_173_dilations_0"), val = tensor<int32, [2]>([1, 1])];
306
+ tensor<int32, []> input_173_groups_0 = const()[name = tensor<string, []>("input_173_groups_0"), val = tensor<int32, []>(1)];
307
+ tensor<fp16, [256, 256, 3, 3]> const_63_to_fp16 = const()[name = tensor<string, []>("const_63_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4822592)))];
308
+ tensor<fp16, [256]> const_64_to_fp16 = const()[name = tensor<string, []>("const_64_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6002304)))];
309
+ tensor<fp16, [?, 256, 10, 125]> out_27_cast_fp16 = conv(bias = const_64_to_fp16, dilations = input_173_dilations_0, groups = input_173_groups_0, pad = input_173_pad_0, pad_type = input_173_pad_type_0, strides = input_173_strides_0, weight = const_63_to_fp16, x = input_171_cast_fp16)[name = tensor<string, []>("out_27_cast_fp16")];
310
+ tensor<string, []> input_175_pad_type_0 = const()[name = tensor<string, []>("input_175_pad_type_0"), val = tensor<string, []>("valid")];
311
+ tensor<int32, [2]> input_175_strides_0 = const()[name = tensor<string, []>("input_175_strides_0"), val = tensor<int32, [2]>([2, 2])];
312
+ tensor<int32, [4]> input_175_pad_0 = const()[name = tensor<string, []>("input_175_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
313
+ tensor<int32, [2]> input_175_dilations_0 = const()[name = tensor<string, []>("input_175_dilations_0"), val = tensor<int32, [2]>([1, 1])];
314
+ tensor<int32, []> input_175_groups_0 = const()[name = tensor<string, []>("input_175_groups_0"), val = tensor<int32, []>(1)];
315
+ tensor<fp16, [256, 128, 1, 1]> const_65_to_fp16 = const()[name = tensor<string, []>("const_65_to_fp16"), val = tensor<fp16, [256, 128, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6002880)))];
316
+ tensor<fp16, [256]> const_66_to_fp16 = const()[name = tensor<string, []>("const_66_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6068480)))];
317
+ tensor<fp16, [?, 256, 10, 125]> var_523_cast_fp16 = conv(bias = const_66_to_fp16, dilations = input_175_dilations_0, groups = input_175_groups_0, pad = input_175_pad_0, pad_type = input_175_pad_type_0, strides = input_175_strides_0, weight = const_65_to_fp16, x = input_165_cast_fp16)[name = tensor<string, []>("op_523_cast_fp16")];
318
+ tensor<fp16, [?, 256, 10, 125]> input_177_cast_fp16 = add(x = out_27_cast_fp16, y = var_523_cast_fp16)[name = tensor<string, []>("input_177_cast_fp16")];
319
+ tensor<fp16, [?, 256, 10, 125]> input_179_cast_fp16 = relu(x = input_177_cast_fp16)[name = tensor<string, []>("input_179_cast_fp16")];
320
+ tensor<string, []> input_181_pad_type_0 = const()[name = tensor<string, []>("input_181_pad_type_0"), val = tensor<string, []>("custom")];
321
+ tensor<int32, [4]> input_181_pad_0 = const()[name = tensor<string, []>("input_181_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
322
+ tensor<int32, [2]> input_181_strides_0 = const()[name = tensor<string, []>("input_181_strides_0"), val = tensor<int32, [2]>([1, 1])];
323
+ tensor<int32, [2]> input_181_dilations_0 = const()[name = tensor<string, []>("input_181_dilations_0"), val = tensor<int32, [2]>([1, 1])];
324
+ tensor<int32, []> input_181_groups_0 = const()[name = tensor<string, []>("input_181_groups_0"), val = tensor<int32, []>(1)];
325
+ tensor<fp16, [256, 256, 3, 3]> const_67_to_fp16 = const()[name = tensor<string, []>("const_67_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(6069056)))];
326
+ tensor<fp16, [256]> const_68_to_fp16 = const()[name = tensor<string, []>("const_68_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(7248768)))];
327
+ tensor<fp16, [?, 256, 10, 125]> input_183_cast_fp16 = conv(bias = const_68_to_fp16, dilations = input_181_dilations_0, groups = input_181_groups_0, pad = input_181_pad_0, pad_type = input_181_pad_type_0, strides = input_181_strides_0, weight = const_67_to_fp16, x = input_179_cast_fp16)[name = tensor<string, []>("input_183_cast_fp16")];
328
+ tensor<fp16, [?, 256, 10, 125]> input_185_cast_fp16 = relu(x = input_183_cast_fp16)[name = tensor<string, []>("input_185_cast_fp16")];
329
+ tensor<string, []> input_187_pad_type_0 = const()[name = tensor<string, []>("input_187_pad_type_0"), val = tensor<string, []>("custom")];
330
+ tensor<int32, [4]> input_187_pad_0 = const()[name = tensor<string, []>("input_187_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
331
+ tensor<int32, [2]> input_187_strides_0 = const()[name = tensor<string, []>("input_187_strides_0"), val = tensor<int32, [2]>([1, 1])];
332
+ tensor<int32, [2]> input_187_dilations_0 = const()[name = tensor<string, []>("input_187_dilations_0"), val = tensor<int32, [2]>([1, 1])];
333
+ tensor<int32, []> input_187_groups_0 = const()[name = tensor<string, []>("input_187_groups_0"), val = tensor<int32, []>(1)];
334
+ tensor<fp16, [256, 256, 3, 3]> const_69_to_fp16 = const()[name = tensor<string, []>("const_69_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(7249344)))];
335
+ tensor<fp16, [256]> const_70_to_fp16 = const()[name = tensor<string, []>("const_70_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(8429056)))];
336
+ tensor<fp16, [?, 256, 10, 125]> out_29_cast_fp16 = conv(bias = const_70_to_fp16, dilations = input_187_dilations_0, groups = input_187_groups_0, pad = input_187_pad_0, pad_type = input_187_pad_type_0, strides = input_187_strides_0, weight = const_69_to_fp16, x = input_185_cast_fp16)[name = tensor<string, []>("out_29_cast_fp16")];
337
+ tensor<fp16, [?, 256, 10, 125]> input_189_cast_fp16 = add(x = out_29_cast_fp16, y = input_179_cast_fp16)[name = tensor<string, []>("input_189_cast_fp16")];
338
+ tensor<fp16, [?, 256, 10, 125]> input_191_cast_fp16 = relu(x = input_189_cast_fp16)[name = tensor<string, []>("input_191_cast_fp16")];
339
+ tensor<string, []> input_193_pad_type_0 = const()[name = tensor<string, []>("input_193_pad_type_0"), val = tensor<string, []>("custom")];
340
+ tensor<int32, [4]> input_193_pad_0 = const()[name = tensor<string, []>("input_193_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
341
+ tensor<int32, [2]> input_193_strides_0 = const()[name = tensor<string, []>("input_193_strides_0"), val = tensor<int32, [2]>([1, 1])];
342
+ tensor<int32, [2]> input_193_dilations_0 = const()[name = tensor<string, []>("input_193_dilations_0"), val = tensor<int32, [2]>([1, 1])];
343
+ tensor<int32, []> input_193_groups_0 = const()[name = tensor<string, []>("input_193_groups_0"), val = tensor<int32, []>(1)];
344
+ tensor<fp16, [256, 256, 3, 3]> const_71_to_fp16 = const()[name = tensor<string, []>("const_71_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(8429632)))];
345
+ tensor<fp16, [256]> const_72_to_fp16 = const()[name = tensor<string, []>("const_72_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(9609344)))];
346
+ tensor<fp16, [?, 256, 10, 125]> input_195_cast_fp16 = conv(bias = const_72_to_fp16, dilations = input_193_dilations_0, groups = input_193_groups_0, pad = input_193_pad_0, pad_type = input_193_pad_type_0, strides = input_193_strides_0, weight = const_71_to_fp16, x = input_191_cast_fp16)[name = tensor<string, []>("input_195_cast_fp16")];
347
+ tensor<fp16, [?, 256, 10, 125]> input_197_cast_fp16 = relu(x = input_195_cast_fp16)[name = tensor<string, []>("input_197_cast_fp16")];
348
+ tensor<string, []> input_199_pad_type_0 = const()[name = tensor<string, []>("input_199_pad_type_0"), val = tensor<string, []>("custom")];
349
+ tensor<int32, [4]> input_199_pad_0 = const()[name = tensor<string, []>("input_199_pad_0"), val = tensor<int32, [4]>([1, 1, 1, 1])];
350
+ tensor<int32, [2]> input_199_strides_0 = const()[name = tensor<string, []>("input_199_strides_0"), val = tensor<int32, [2]>([1, 1])];
351
+ tensor<int32, [2]> input_199_dilations_0 = const()[name = tensor<string, []>("input_199_dilations_0"), val = tensor<int32, [2]>([1, 1])];
352
+ tensor<int32, []> input_199_groups_0 = const()[name = tensor<string, []>("input_199_groups_0"), val = tensor<int32, []>(1)];
353
+ tensor<fp16, [256, 256, 3, 3]> const_73_to_fp16 = const()[name = tensor<string, []>("const_73_to_fp16"), val = tensor<fp16, [256, 256, 3, 3]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(9609920)))];
354
+ tensor<fp16, [256]> const_74_to_fp16 = const()[name = tensor<string, []>("const_74_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(10789632)))];
355
+ tensor<fp16, [?, 256, 10, 125]> out_cast_fp16 = conv(bias = const_74_to_fp16, dilations = input_199_dilations_0, groups = input_199_groups_0, pad = input_199_pad_0, pad_type = input_199_pad_type_0, strides = input_199_strides_0, weight = const_73_to_fp16, x = input_197_cast_fp16)[name = tensor<string, []>("out_cast_fp16")];
356
+ tensor<fp16, [?, 256, 10, 125]> input_201_cast_fp16 = add(x = out_cast_fp16, y = input_191_cast_fp16)[name = tensor<string, []>("input_201_cast_fp16")];
357
+ tensor<fp16, [?, 256, 10, 125]> features_cast_fp16 = relu(x = input_201_cast_fp16)[name = tensor<string, []>("features_cast_fp16")];
358
+ tensor<int32, [3]> concat_0x = const()[name = tensor<string, []>("concat_0x"), val = tensor<int32, [3]>([-1, 2560, 125])];
359
+ tensor<fp16, [?, 2560, 125]> sequences_1_cast_fp16 = reshape(shape = concat_0x, x = features_cast_fp16)[name = tensor<string, []>("sequences_1_cast_fp16")];
360
+ tensor<int32, [1]> weights_fp32_axes_0 = const()[name = tensor<string, []>("weights_fp32_axes_0"), val = tensor<int32, [1]>([1])];
361
+ tensor<fp16, [?, 1, 125]> weights_fp32_cast_fp16 = expand_dims(axes = weights_fp32_axes_0, x = weights_3_cast_fp16)[name = tensor<string, []>("weights_fp32_cast_fp16")];
362
+ tensor<int32, [1]> weights_expanded_axes_0 = const()[name = tensor<string, []>("weights_expanded_axes_0"), val = tensor<int32, [1]>([2])];
363
+ tensor<fp16, [?, 1, 1, 125]> weights_expanded_cast_fp16 = expand_dims(axes = weights_expanded_axes_0, x = weights_fp32_cast_fp16)[name = tensor<string, []>("weights_expanded_cast_fp16")];
364
+ tensor<int32, [1]> var_599_axes_0 = const()[name = tensor<string, []>("op_599_axes_0"), val = tensor<int32, [1]>([-1])];
365
+ tensor<bool, []> var_599_keep_dims_0 = const()[name = tensor<string, []>("op_599_keep_dims_0"), val = tensor<bool, []>(false)];
366
+ tensor<fp16, [?, 1, 1]> var_599_cast_fp16 = reduce_sum(axes = var_599_axes_0, keep_dims = var_599_keep_dims_0, x = weights_expanded_cast_fp16)[name = tensor<string, []>("op_599_cast_fp16")];
367
+ tensor<fp16, []> var_600_to_fp16 = const()[name = tensor<string, []>("op_600_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
368
+ tensor<fp16, [?, 1, 1]> v1_cast_fp16 = add(x = var_599_cast_fp16, y = var_600_to_fp16)[name = tensor<string, []>("v1_cast_fp16")];
369
+ tensor<int32, [1]> var_602_axes_0 = const()[name = tensor<string, []>("op_602_axes_0"), val = tensor<int32, [1]>([1])];
370
+ tensor<fp16, [?, 1, 2560, 125]> var_602_cast_fp16 = expand_dims(axes = var_602_axes_0, x = sequences_1_cast_fp16)[name = tensor<string, []>("op_602_cast_fp16")];
371
+ tensor<fp16, [?, 1, 2560, 125]> weighted_cast_fp16 = mul(x = var_602_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("weighted_cast_fp16")];
372
+ tensor<int32, [1]> var_605_axes_0 = const()[name = tensor<string, []>("op_605_axes_0"), val = tensor<int32, [1]>([-1])];
373
+ tensor<bool, []> var_605_keep_dims_0 = const()[name = tensor<string, []>("op_605_keep_dims_0"), val = tensor<bool, []>(false)];
374
+ tensor<fp16, [?, 1, 2560]> var_605_cast_fp16 = reduce_sum(axes = var_605_axes_0, keep_dims = var_605_keep_dims_0, x = weighted_cast_fp16)[name = tensor<string, []>("op_605_cast_fp16")];
375
+ tensor<fp16, [?, 1, 2560]> mean_cast_fp16 = real_div(x = var_605_cast_fp16, y = v1_cast_fp16)[name = tensor<string, []>("mean_cast_fp16")];
376
+ tensor<int32, [1]> var_608_axes_0 = const()[name = tensor<string, []>("op_608_axes_0"), val = tensor<int32, [1]>([-1])];
377
+ tensor<fp16, [?, 1, 2560, 1]> var_608_cast_fp16 = expand_dims(axes = var_608_axes_0, x = mean_cast_fp16)[name = tensor<string, []>("op_608_cast_fp16")];
378
+ tensor<fp16, [?, 1, 2560, 125]> diff_cast_fp16 = sub(x = var_602_cast_fp16, y = var_608_cast_fp16)[name = tensor<string, []>("diff_cast_fp16")];
379
+ tensor<fp16, [?, 1, 1, 125]> var_610_cast_fp16 = mul(x = weights_expanded_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("op_610_cast_fp16")];
380
+ tensor<int32, [1]> v2_axes_0 = const()[name = tensor<string, []>("v2_axes_0"), val = tensor<int32, [1]>([-1])];
381
+ tensor<bool, []> v2_keep_dims_0 = const()[name = tensor<string, []>("v2_keep_dims_0"), val = tensor<bool, []>(false)];
382
+ tensor<fp16, [?, 1, 1]> v2_cast_fp16 = reduce_sum(axes = v2_axes_0, keep_dims = v2_keep_dims_0, x = var_610_cast_fp16)[name = tensor<string, []>("v2_cast_fp16")];
383
+ tensor<fp16, [?, 1, 1]> var_613_cast_fp16 = real_div(x = v2_cast_fp16, y = v1_cast_fp16)[name = tensor<string, []>("op_613_cast_fp16")];
384
+ tensor<fp16, [?, 1, 1]> var_614_cast_fp16 = sub(x = v1_cast_fp16, y = var_613_cast_fp16)[name = tensor<string, []>("op_614_cast_fp16")];
385
+ tensor<fp16, []> var_615_to_fp16 = const()[name = tensor<string, []>("op_615_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
386
+ tensor<fp16, [?, 1, 1]> denom_cast_fp16 = add(x = var_614_cast_fp16, y = var_615_to_fp16)[name = tensor<string, []>("denom_cast_fp16")];
387
+ tensor<fp16, [?, 1, 2560, 125]> var_617_cast_fp16 = mul(x = diff_cast_fp16, y = diff_cast_fp16)[name = tensor<string, []>("op_617_cast_fp16")];
388
+ tensor<fp16, [?, 1, 2560, 125]> var_618_cast_fp16 = mul(x = var_617_cast_fp16, y = weights_expanded_cast_fp16)[name = tensor<string, []>("op_618_cast_fp16")];
389
+ tensor<int32, [1]> var_620_axes_0 = const()[name = tensor<string, []>("op_620_axes_0"), val = tensor<int32, [1]>([-1])];
390
+ tensor<bool, []> var_620_keep_dims_0 = const()[name = tensor<string, []>("op_620_keep_dims_0"), val = tensor<bool, []>(false)];
391
+ tensor<fp16, [?, 1, 2560]> var_620_cast_fp16 = reduce_sum(axes = var_620_axes_0, keep_dims = var_620_keep_dims_0, x = var_618_cast_fp16)[name = tensor<string, []>("op_620_cast_fp16")];
392
+ tensor<fp16, [?, 1, 2560]> var_cast_fp16 = real_div(x = var_620_cast_fp16, y = denom_cast_fp16)[name = tensor<string, []>("var_cast_fp16")];
393
+ tensor<fp16, []> var_34_to_fp16 = const()[name = tensor<string, []>("op_34_to_fp16"), val = tensor<fp16, []>(0x1.1p-20)];
394
+ tensor<fp16, []> const_1_to_fp16 = const()[name = tensor<string, []>("const_1_to_fp16"), val = tensor<fp16, []>(inf)];
395
+ tensor<fp16, [?, 1, 2560]> clip_0_cast_fp16 = clip(alpha = var_34_to_fp16, beta = const_1_to_fp16, x = var_cast_fp16)[name = tensor<string, []>("clip_0_cast_fp16")];
396
+ tensor<fp16, [?, 1, 2560]> std_cast_fp16 = sqrt(x = clip_0_cast_fp16)[name = tensor<string, []>("std_cast_fp16")];
397
+ tensor<bool, []> output_interleave_0 = const()[name = tensor<string, []>("output_interleave_0"), val = tensor<bool, []>(false)];
398
+ tensor<fp16, [?, 1, 5120]> output_cast_fp16 = concat(axis = var_33, interleave = output_interleave_0, values = (mean_cast_fp16, std_cast_fp16))[name = tensor<string, []>("output_cast_fp16")];
399
+ tensor<int32, [1]> var_626_axes_0 = const()[name = tensor<string, []>("op_626_axes_0"), val = tensor<int32, [1]>([1])];
400
+ tensor<fp16, [?, 5120]> var_626_cast_fp16 = squeeze(axes = var_626_axes_0, x = output_cast_fp16)[name = tensor<string, []>("op_626_cast_fp16")];
401
+ tensor<int32, [1]> var_628_axes_0 = const()[name = tensor<string, []>("op_628_axes_0"), val = tensor<int32, [1]>([-1])];
402
+ tensor<fp16, [?, 5120, 1]> var_628_cast_fp16 = expand_dims(axes = var_628_axes_0, x = var_626_cast_fp16)[name = tensor<string, []>("op_628_cast_fp16")];
403
+ tensor<int32, [1]> input_203_axes_0 = const()[name = tensor<string, []>("input_203_axes_0"), val = tensor<int32, [1]>([-1])];
404
+ tensor<fp16, [?, 5120, 1, 1]> input_203_cast_fp16 = expand_dims(axes = input_203_axes_0, x = var_628_cast_fp16)[name = tensor<string, []>("input_203_cast_fp16")];
405
+ tensor<string, []> var_636_pad_type_0 = const()[name = tensor<string, []>("op_636_pad_type_0"), val = tensor<string, []>("valid")];
406
+ tensor<int32, [2]> var_636_strides_0 = const()[name = tensor<string, []>("op_636_strides_0"), val = tensor<int32, [2]>([1, 1])];
407
+ tensor<int32, [4]> var_636_pad_0 = const()[name = tensor<string, []>("op_636_pad_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
408
+ tensor<int32, [2]> var_636_dilations_0 = const()[name = tensor<string, []>("op_636_dilations_0"), val = tensor<int32, [2]>([1, 1])];
409
+ tensor<int32, []> var_636_groups_0 = const()[name = tensor<string, []>("op_636_groups_0"), val = tensor<int32, []>(1)];
410
+ tensor<fp16, [256, 5120, 1, 1]> resnet_seg_1_weight_to_fp16 = const()[name = tensor<string, []>("resnet_seg_1_weight_to_fp16"), val = tensor<fp16, [256, 5120, 1, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(10790208)))];
411
+ tensor<fp16, [256]> resnet_seg_1_bias_to_fp16 = const()[name = tensor<string, []>("resnet_seg_1_bias_to_fp16"), val = tensor<fp16, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(13411712)))];
412
+ tensor<fp16, [?, 256, 1, 1]> var_636_cast_fp16 = conv(bias = resnet_seg_1_bias_to_fp16, dilations = var_636_dilations_0, groups = var_636_groups_0, pad = var_636_pad_0, pad_type = var_636_pad_type_0, strides = var_636_strides_0, weight = resnet_seg_1_weight_to_fp16, x = input_203_cast_fp16)[name = tensor<string, []>("op_636_cast_fp16")];
413
+ tensor<int32, [2]> concat_1x = const()[name = tensor<string, []>("concat_1x"), val = tensor<int32, [2]>([-1, 256])];
414
+ tensor<fp16, [?, 256]> input_cast_fp16 = reshape(shape = concat_1x, x = var_636_cast_fp16)[name = tensor<string, []>("input_cast_fp16")];
415
+ tensor<string, []> input_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("input_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
416
+ tensor<int32, [1]> var_640 = const()[name = tensor<string, []>("op_640"), val = tensor<int32, [1]>([-1])];
417
+ tensor<bool, []> var_641 = const()[name = tensor<string, []>("op_641"), val = tensor<bool, []>(true)];
418
+ tensor<fp32, [?, 256]> input_cast_fp16_to_fp32 = cast(dtype = input_cast_fp16_to_fp32_dtype_0, x = input_cast_fp16)[name = tensor<string, []>("cast_12")];
419
+ tensor<fp32, [?, 1]> norms_1 = reduce_l2_norm(axes = var_640, keep_dims = var_641, x = input_cast_fp16_to_fp32)[name = tensor<string, []>("norms_1")];
420
+ tensor<string, []> norms_1_to_fp16_dtype_0 = const()[name = tensor<string, []>("norms_1_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
421
+ tensor<fp16, []> var_644_to_fp16 = const()[name = tensor<string, []>("op_644_to_fp16"), val = tensor<fp16, []>(0x1.a38p-14)];
422
+ tensor<fp16, []> const_2_to_fp16 = const()[name = tensor<string, []>("const_2_to_fp16"), val = tensor<fp16, []>(inf)];
423
+ tensor<fp16, [?, 1]> norms_1_to_fp16 = cast(dtype = norms_1_to_fp16_dtype_0, x = norms_1)[name = tensor<string, []>("cast_11")];
424
+ tensor<fp16, [?, 1]> clip_1_cast_fp16 = clip(alpha = var_644_to_fp16, beta = const_2_to_fp16, x = norms_1_to_fp16)[name = tensor<string, []>("clip_1_cast_fp16")];
425
+ tensor<fp16, [?, 256]> var_647_cast_fp16 = real_div(x = input_cast_fp16, y = clip_1_cast_fp16)[name = tensor<string, []>("op_647_cast_fp16")];
426
+ tensor<string, []> var_647_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_647_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
427
+ tensor<fp32, [?, 256]> embedding = cast(dtype = var_647_cast_fp16_to_fp32_dtype_0, x = var_647_cast_fp16)[name = tensor<string, []>("cast_10")];
428
+ } -> (embedding);
429
+ }
Embedding.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b
3
+ size 13412288
FBank.mlmodelc/metadata.json ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "shortDescription" : "pyannote community-1 FBANK frontend (10 s audio preprocessing to 80×998 features, batch 1-32, CPU preferred)",
4
+ "metadataOutputVersion" : "3.0",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "fbank_features",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "version" : "pyannote-speaker-diarization-community-1",
18
+ "modelParameters" : [
19
+
20
+ ],
21
+ "author" : "Fluid Inference",
22
+ "specificationVersion" : 8,
23
+ "storagePrecision" : "Float32",
24
+ "license" : "CC-BY-4.0",
25
+ "mlProgramOperationTypeHistogram" : {
26
+ "Ios17.mul" : 3,
27
+ "Ios17.transpose" : 2,
28
+ "Ios17.sub" : 3,
29
+ "Ios17.conv" : 4,
30
+ "Ios17.log" : 1,
31
+ "Ios17.sliceByIndex" : 1,
32
+ "Ios16.reduceMean" : 2,
33
+ "Ios17.add" : 2,
34
+ "Ios17.clip" : 1,
35
+ "Ios17.pow" : 2,
36
+ "Ios17.expandDims" : 4,
37
+ "Ios17.squeeze" : 4,
38
+ "Ios17.reshape" : 2,
39
+ "Pad" : 2
40
+ },
41
+ "computePrecision" : "Mixed (Float32, Int32)",
42
+ "stateSchema" : [
43
+
44
+ ],
45
+ "isUpdatable" : "0",
46
+ "availability" : {
47
+ "macOS" : "14.0",
48
+ "tvOS" : "17.0",
49
+ "visionOS" : "1.0",
50
+ "watchOS" : "10.0",
51
+ "iOS" : "17.0",
52
+ "macCatalyst" : "17.0"
53
+ },
54
+ "modelType" : {
55
+ "name" : "MLModelType_mlProgram"
56
+ },
57
+ "inputSchema" : [
58
+ {
59
+ "shortDescription" : "",
60
+ "dataType" : "Float32",
61
+ "hasShapeFlexibility" : "1",
62
+ "isOptional" : "0",
63
+ "shapeFlexibility" : "1 × 1 × 160000 | 2 × 1 × 160000 | 3 × 1 × 160000 | 4 × 1 × 160000 | 5 × 1 × 160000 | 6 × 1 × 160000 | 7 × 1 × 160000 | 8 × 1 × 160000 | 9 × 1 × 160000 | 10 × 1 × 160000 | 11 × 1 × 160000 | 12 × 1 × 160000 | 13 × 1 × 160000 | 14 × 1 × 160000 | 15 × 1 × 160000 | 16 × 1 × 160000 | 17 × 1 × 160000 | 18 × 1 × 160000 | 19 × 1 × 160000 | 20 × 1 × 160000 | 21 × 1 × 160000 | 22 × 1 × 160000 | 23 × 1 × 160000 | 24 × 1 × 160000 | 25 × 1 × 160000 | 26 × 1 × 160000 | 27 × 1 × 160000 | 28 × 1 × 160000 | 29 × 1 × 160000 | 30 × 1 × 160000 | 31 × 1 × 160000 | 32 × 1 × 160000",
64
+ "formattedType" : "MultiArray (Float32 1 × 1 × 160000)",
65
+ "type" : "MultiArray",
66
+ "shape" : "[1, 1, 160000]",
67
+ "name" : "audio",
68
+ "enumeratedShapes" : "[[1, 1, 160000], [2, 1, 160000], [3, 1, 160000], [4, 1, 160000], [5, 1, 160000], [6, 1, 160000], [7, 1, 160000], [8, 1, 160000], [9, 1, 160000], [10, 1, 160000], [11, 1, 160000], [12, 1, 160000], [13, 1, 160000], [14, 1, 160000], [15, 1, 160000], [16, 1, 160000], [17, 1, 160000], [18, 1, 160000], [19, 1, 160000], [20, 1, 160000], [21, 1, 160000], [22, 1, 160000], [23, 1, 160000], [24, 1, 160000], [25, 1, 160000], [26, 1, 160000], [27, 1, 160000], [28, 1, 160000], [29, 1, 160000], [30, 1, 160000], [31, 1, 160000], [32, 1, 160000]]"
69
+ }
70
+ ],
71
+ "userDefinedMetadata" : {
72
+ "com.github.apple.coremltools.conversion_date" : "2025-10-15",
73
+ "com.github.apple.coremltools.source" : "torch==2.8.0",
74
+ "com.github.apple.coremltools.version" : "9.0b1",
75
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
76
+ },
77
+ "generatedClassName" : "fbank_community_1",
78
+ "method" : "predict"
79
+ }
80
+ ]
FBank.mlmodelc/model.mil ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [?, 1, 160000]> audio) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"audio", [1, 1, 160000]}}), ("EnumeratedShapes", {{"audio_1_1_10_1_160000_", {{"audio", [10, 1, 160000]}}}, {"audio_1_1_11_1_160000_", {{"audio", [11, 1, 160000]}}}, {"audio_1_1_12_1_160000_", {{"audio", [12, 1, 160000]}}}, {"audio_1_1_13_1_160000_", {{"audio", [13, 1, 160000]}}}, {"audio_1_1_14_1_160000_", {{"audio", [14, 1, 160000]}}}, {"audio_1_1_15_1_160000_", {{"audio", [15, 1, 160000]}}}, {"audio_1_1_16_1_160000_", {{"audio", [16, 1, 160000]}}}, {"audio_1_1_17_1_160000_", {{"audio", [17, 1, 160000]}}}, {"audio_1_1_18_1_160000_", {{"audio", [18, 1, 160000]}}}, {"audio_1_1_19_1_160000_", {{"audio", [19, 1, 160000]}}}, {"audio_1_1_1_1_160000_", {{"audio", [1, 1, 160000]}}}, {"audio_1_1_20_1_160000_", {{"audio", [20, 1, 160000]}}}, {"audio_1_1_21_1_160000_", {{"audio", [21, 1, 160000]}}}, {"audio_1_1_22_1_160000_", {{"audio", [22, 1, 160000]}}}, {"audio_1_1_23_1_160000_", {{"audio", [23, 1, 160000]}}}, {"audio_1_1_24_1_160000_", {{"audio", [24, 1, 160000]}}}, {"audio_1_1_25_1_160000_", {{"audio", [25, 1, 160000]}}}, {"audio_1_1_26_1_160000_", {{"audio", [26, 1, 160000]}}}, {"audio_1_1_27_1_160000_", {{"audio", [27, 1, 160000]}}}, {"audio_1_1_28_1_160000_", {{"audio", [28, 1, 160000]}}}, {"audio_1_1_29_1_160000_", {{"audio", [29, 1, 160000]}}}, {"audio_1_1_2_1_160000_", {{"audio", [2, 1, 160000]}}}, {"audio_1_1_30_1_160000_", {{"audio", [30, 1, 160000]}}}, {"audio_1_1_31_1_160000_", {{"audio", [31, 1, 160000]}}}, {"audio_1_1_32_1_160000_", {{"audio", [32, 1, 160000]}}}, {"audio_1_1_3_1_160000_", {{"audio", [3, 1, 160000]}}}, {"audio_1_1_4_1_160000_", {{"audio", [4, 1, 160000]}}}, {"audio_1_1_5_1_160000_", {{"audio", [5, 1, 160000]}}}, {"audio_1_1_6_1_160000_", {{"audio", [6, 1, 160000]}}}, {"audio_1_1_7_1_160000_", {{"audio", [7, 1, 160000]}}}, {"audio_1_1_8_1_160000_", {{"audio", [8, 1, 160000]}}}, {"audio_1_1_9_1_160000_", {{"audio", [9, 1, 160000]}}}})))] {
5
+ tensor<fp32, [80, 257, 1]> _fbank_mel_weight = const()[name = tensor<string, []>("_fbank_mel_weight"), val = tensor<fp32, [80, 257, 1]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
6
+ tensor<fp32, [257, 1, 512]> _fbank_dft_imag_weight = const()[name = tensor<string, []>("_fbank_dft_imag_weight"), val = tensor<fp32, [257, 1, 512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(82368)))];
7
+ tensor<fp32, [257, 1, 512]> _fbank_dft_real_weight = const()[name = tensor<string, []>("_fbank_dft_real_weight"), val = tensor<fp32, [257, 1, 512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(608768)))];
8
+ tensor<fp32, [1, 400]> _fbank_window = const()[name = tensor<string, []>("_fbank_window"), val = tensor<fp32, [1, 400]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1135168)))];
9
+ tensor<fp32, []> _fbank_eps = const()[name = tensor<string, []>("_fbank_eps"), val = tensor<fp32, []>(0x1.0c6f7ap-20)];
10
+ tensor<fp32, [400, 1, 400]> _fbank_frame_kernel = const()[name = tensor<string, []>("_fbank_frame_kernel"), val = tensor<fp32, [400, 1, 400]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1136832)))];
11
+ tensor<fp32, []> var_3_promoted = const()[name = tensor<string, []>("op_3_promoted"), val = tensor<fp32, []>(0x1p+15)];
12
+ tensor<fp32, [?, 1, 160000]> waveforms_3 = mul(x = audio, y = var_3_promoted)[name = tensor<string, []>("waveforms_3")];
13
+ tensor<string, []> frames_1_pad_type_0 = const()[name = tensor<string, []>("frames_1_pad_type_0"), val = tensor<string, []>("valid")];
14
+ tensor<int32, [1]> frames_1_strides_0 = const()[name = tensor<string, []>("frames_1_strides_0"), val = tensor<int32, [1]>([160])];
15
+ tensor<int32, [2]> frames_1_pad_0 = const()[name = tensor<string, []>("frames_1_pad_0"), val = tensor<int32, [2]>([0, 0])];
16
+ tensor<int32, [1]> frames_1_dilations_0 = const()[name = tensor<string, []>("frames_1_dilations_0"), val = tensor<int32, [1]>([1])];
17
+ tensor<int32, []> frames_1_groups_0 = const()[name = tensor<string, []>("frames_1_groups_0"), val = tensor<int32, []>(1)];
18
+ tensor<fp32, [?, 400, 998]> frames_1 = conv(dilations = frames_1_dilations_0, groups = frames_1_groups_0, pad = frames_1_pad_0, pad_type = frames_1_pad_type_0, strides = frames_1_strides_0, weight = _fbank_frame_kernel, x = waveforms_3)[name = tensor<string, []>("frames_1")];
19
+ tensor<int32, [3]> frames_3_perm_0 = const()[name = tensor<string, []>("frames_3_perm_0"), val = tensor<int32, [3]>([0, 2, 1])];
20
+ tensor<int32, [2]> concat_0x = const()[name = tensor<string, []>("concat_0x"), val = tensor<int32, [2]>([-1, 400])];
21
+ tensor<fp32, [?, 998, 400]> frames_3 = transpose(perm = frames_3_perm_0, x = frames_1)[name = tensor<string, []>("transpose_1")];
22
+ tensor<fp32, [?, 400]> frames_5 = reshape(shape = concat_0x, x = frames_3)[name = tensor<string, []>("frames_5")];
23
+ tensor<int32, [1]> var_53_axes_0 = const()[name = tensor<string, []>("op_53_axes_0"), val = tensor<int32, [1]>([1])];
24
+ tensor<bool, []> var_53_keep_dims_0 = const()[name = tensor<string, []>("op_53_keep_dims_0"), val = tensor<bool, []>(true)];
25
+ tensor<fp32, [?, 1]> var_53 = reduce_mean(axes = var_53_axes_0, keep_dims = var_53_keep_dims_0, x = frames_5)[name = tensor<string, []>("op_53")];
26
+ tensor<fp32, [?, 400]> frames_7 = sub(x = frames_5, y = var_53)[name = tensor<string, []>("frames_7")];
27
+ tensor<int32, [1]> input_1_axes_0 = const()[name = tensor<string, []>("input_1_axes_0"), val = tensor<int32, [1]>([1])];
28
+ tensor<fp32, [?, 1, 400]> input_1 = expand_dims(axes = input_1_axes_0, x = frames_7)[name = tensor<string, []>("input_1")];
29
+ tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x0p+0)];
30
+ tensor<int32, [6]> var_57_pad_0 = const()[name = tensor<string, []>("op_57_pad_0"), val = tensor<int32, [6]>([0, 0, 0, 0, 1, 0])];
31
+ tensor<string, []> var_57_mode_0 = const()[name = tensor<string, []>("op_57_mode_0"), val = tensor<string, []>("replicate")];
32
+ tensor<fp32, [?, 1, 401]> var_57 = pad(constant_val = const_0, mode = var_57_mode_0, pad = var_57_pad_0, x = input_1)[name = tensor<string, []>("op_57")];
33
+ tensor<int32, [1]> padded_axes_0 = const()[name = tensor<string, []>("padded_axes_0"), val = tensor<int32, [1]>([1])];
34
+ tensor<fp32, [?, 401]> padded = squeeze(axes = padded_axes_0, x = var_57)[name = tensor<string, []>("padded")];
35
+ tensor<int32, [2]> var_60_begin_0 = const()[name = tensor<string, []>("op_60_begin_0"), val = tensor<int32, [2]>([0, 0])];
36
+ tensor<int32, [2]> var_60_end_0 = const()[name = tensor<string, []>("op_60_end_0"), val = tensor<int32, [2]>([0, 400])];
37
+ tensor<bool, [2]> var_60_end_mask_0 = const()[name = tensor<string, []>("op_60_end_mask_0"), val = tensor<bool, [2]>([true, false])];
38
+ tensor<fp32, [?, 400]> var_60 = slice_by_index(begin = var_60_begin_0, end = var_60_end_0, end_mask = var_60_end_mask_0, x = padded)[name = tensor<string, []>("op_60")];
39
+ tensor<fp32, []> var_61 = const()[name = tensor<string, []>("op_61"), val = tensor<fp32, []>(0x1.f0a3d8p-1)];
40
+ tensor<fp32, [?, 400]> var_62 = mul(x = var_60, y = var_61)[name = tensor<string, []>("op_62")];
41
+ tensor<fp32, [?, 400]> frames_9 = sub(x = frames_7, y = var_62)[name = tensor<string, []>("frames_9")];
42
+ tensor<fp32, [?, 400]> frames_11 = mul(x = frames_9, y = _fbank_window)[name = tensor<string, []>("frames_11")];
43
+ tensor<int32, [1]> input_axes_0 = const()[name = tensor<string, []>("input_axes_0"), val = tensor<int32, [1]>([1])];
44
+ tensor<fp32, [?, 1, 400]> input = expand_dims(axes = input_axes_0, x = frames_11)[name = tensor<string, []>("input")];
45
+ tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x0p+0)];
46
+ tensor<int32, [6]> var_67_pad_0 = const()[name = tensor<string, []>("op_67_pad_0"), val = tensor<int32, [6]>([0, 0, 0, 0, 0, 112])];
47
+ tensor<string, []> var_67_mode_0 = const()[name = tensor<string, []>("op_67_mode_0"), val = tensor<string, []>("constant")];
48
+ tensor<fp32, [?, 1, 512]> var_67 = pad(constant_val = const_1, mode = var_67_mode_0, pad = var_67_pad_0, x = input)[name = tensor<string, []>("op_67")];
49
+ tensor<string, []> var_74_pad_type_0 = const()[name = tensor<string, []>("op_74_pad_type_0"), val = tensor<string, []>("valid")];
50
+ tensor<int32, [1]> var_74_strides_0 = const()[name = tensor<string, []>("op_74_strides_0"), val = tensor<int32, [1]>([1])];
51
+ tensor<int32, [2]> var_74_pad_0 = const()[name = tensor<string, []>("op_74_pad_0"), val = tensor<int32, [2]>([0, 0])];
52
+ tensor<int32, [1]> var_74_dilations_0 = const()[name = tensor<string, []>("op_74_dilations_0"), val = tensor<int32, [1]>([1])];
53
+ tensor<int32, []> var_74_groups_0 = const()[name = tensor<string, []>("op_74_groups_0"), val = tensor<int32, []>(1)];
54
+ tensor<fp32, [?, 257, 1]> var_74 = conv(dilations = var_74_dilations_0, groups = var_74_groups_0, pad = var_74_pad_0, pad_type = var_74_pad_type_0, strides = var_74_strides_0, weight = _fbank_dft_real_weight, x = var_67)[name = tensor<string, []>("op_74")];
55
+ tensor<int32, [1]> real_axes_0 = const()[name = tensor<string, []>("real_axes_0"), val = tensor<int32, [1]>([-1])];
56
+ tensor<fp32, [?, 257]> real = squeeze(axes = real_axes_0, x = var_74)[name = tensor<string, []>("real")];
57
+ tensor<string, []> var_80_pad_type_0 = const()[name = tensor<string, []>("op_80_pad_type_0"), val = tensor<string, []>("valid")];
58
+ tensor<int32, [1]> var_80_strides_0 = const()[name = tensor<string, []>("op_80_strides_0"), val = tensor<int32, [1]>([1])];
59
+ tensor<int32, [2]> var_80_pad_0 = const()[name = tensor<string, []>("op_80_pad_0"), val = tensor<int32, [2]>([0, 0])];
60
+ tensor<int32, [1]> var_80_dilations_0 = const()[name = tensor<string, []>("op_80_dilations_0"), val = tensor<int32, [1]>([1])];
61
+ tensor<int32, []> var_80_groups_0 = const()[name = tensor<string, []>("op_80_groups_0"), val = tensor<int32, []>(1)];
62
+ tensor<fp32, [?, 257, 1]> var_80 = conv(dilations = var_80_dilations_0, groups = var_80_groups_0, pad = var_80_pad_0, pad_type = var_80_pad_type_0, strides = var_80_strides_0, weight = _fbank_dft_imag_weight, x = var_67)[name = tensor<string, []>("op_80")];
63
+ tensor<int32, [1]> imag_axes_0 = const()[name = tensor<string, []>("imag_axes_0"), val = tensor<int32, [1]>([-1])];
64
+ tensor<fp32, [?, 257]> imag = squeeze(axes = imag_axes_0, x = var_80)[name = tensor<string, []>("imag")];
65
+ tensor<fp32, []> var_22_promoted = const()[name = tensor<string, []>("op_22_promoted"), val = tensor<fp32, []>(0x1p+1)];
66
+ tensor<fp32, [?, 257]> var_82 = pow(x = real, y = var_22_promoted)[name = tensor<string, []>("op_82")];
67
+ tensor<fp32, []> var_22_promoted_1 = const()[name = tensor<string, []>("op_22_promoted_1"), val = tensor<fp32, []>(0x1p+1)];
68
+ tensor<fp32, [?, 257]> var_83 = pow(x = imag, y = var_22_promoted_1)[name = tensor<string, []>("op_83")];
69
+ tensor<fp32, [?, 257]> power = add(x = var_82, y = var_83)[name = tensor<string, []>("power")];
70
+ tensor<int32, [1]> var_85_axes_0 = const()[name = tensor<string, []>("op_85_axes_0"), val = tensor<int32, [1]>([-1])];
71
+ tensor<fp32, [?, 257, 1]> var_85 = expand_dims(axes = var_85_axes_0, x = power)[name = tensor<string, []>("op_85")];
72
+ tensor<string, []> var_90_pad_type_0 = const()[name = tensor<string, []>("op_90_pad_type_0"), val = tensor<string, []>("valid")];
73
+ tensor<int32, [1]> var_90_strides_0 = const()[name = tensor<string, []>("op_90_strides_0"), val = tensor<int32, [1]>([1])];
74
+ tensor<int32, [2]> var_90_pad_0 = const()[name = tensor<string, []>("op_90_pad_0"), val = tensor<int32, [2]>([0, 0])];
75
+ tensor<int32, [1]> var_90_dilations_0 = const()[name = tensor<string, []>("op_90_dilations_0"), val = tensor<int32, [1]>([1])];
76
+ tensor<int32, []> var_90_groups_0 = const()[name = tensor<string, []>("op_90_groups_0"), val = tensor<int32, []>(1)];
77
+ tensor<fp32, [?, 80, 1]> var_90 = conv(dilations = var_90_dilations_0, groups = var_90_groups_0, pad = var_90_pad_0, pad_type = var_90_pad_type_0, strides = var_90_strides_0, weight = _fbank_mel_weight, x = var_85)[name = tensor<string, []>("op_90")];
78
+ tensor<int32, [1]> mel_1_axes_0 = const()[name = tensor<string, []>("mel_1_axes_0"), val = tensor<int32, [1]>([-1])];
79
+ tensor<fp32, [?, 80]> mel_1 = squeeze(axes = mel_1_axes_0, x = var_90)[name = tensor<string, []>("mel_1")];
80
+ tensor<fp32, [?, 80]> mel_3 = add(x = mel_1, y = _fbank_eps)[name = tensor<string, []>("mel_3")];
81
+ tensor<fp32, []> const_2 = const()[name = tensor<string, []>("const_2"), val = tensor<fp32, []>(0x1.fffffep+127)];
82
+ tensor<fp32, [?, 80]> clip_0 = clip(alpha = _fbank_eps, beta = const_2, x = mel_3)[name = tensor<string, []>("clip_0")];
83
+ tensor<fp32, []> mel_epsilon_0 = const()[name = tensor<string, []>("mel_epsilon_0"), val = tensor<fp32, []>(0x1p-149)];
84
+ tensor<fp32, [?, 80]> mel = log(epsilon = mel_epsilon_0, x = clip_0)[name = tensor<string, []>("mel")];
85
+ tensor<int32, [3]> concat_1x = const()[name = tensor<string, []>("concat_1x"), val = tensor<int32, [3]>([-1, 998, 80])];
86
+ tensor<fp32, [?, 998, 80]> var_96 = reshape(shape = concat_1x, x = mel)[name = tensor<string, []>("op_96")];
87
+ tensor<int32, [1]> centered_axes_0 = const()[name = tensor<string, []>("centered_axes_0"), val = tensor<int32, [1]>([1])];
88
+ tensor<bool, []> centered_keep_dims_0 = const()[name = tensor<string, []>("centered_keep_dims_0"), val = tensor<bool, []>(true)];
89
+ tensor<fp32, [?, 1, 80]> centered = reduce_mean(axes = centered_axes_0, keep_dims = centered_keep_dims_0, x = var_96)[name = tensor<string, []>("centered")];
90
+ tensor<fp32, [?, 998, 80]> features = sub(x = var_96, y = centered)[name = tensor<string, []>("features")];
91
+ tensor<int32, [3]> var_115 = const()[name = tensor<string, []>("op_115"), val = tensor<int32, [3]>([0, 2, 1])];
92
+ tensor<int32, [1]> var_118_axes_0 = const()[name = tensor<string, []>("op_118_axes_0"), val = tensor<int32, [1]>([1])];
93
+ tensor<fp32, [?, 80, 998]> var_116 = transpose(perm = var_115, x = features)[name = tensor<string, []>("transpose_0")];
94
+ tensor<fp32, [?, 1, 80, 998]> fbank_features = expand_dims(axes = var_118_axes_0, x = var_116)[name = tensor<string, []>("op_118")];
95
+ } -> (fbank_features);
96
+ }
LICENSE ADDED
@@ -0,0 +1,426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Creative Commons Attribution 4.0 International
3
+ spdx-id: CC-BY-4.0
4
+
5
+ description: Permits almost any use subject to providing credit and license notice. Frequently used for media assets and educational materials. The most common license for Open Access scientific publications. Not recommended for software.
6
+
7
+ how: Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. It is also acceptable to solely supply a link to a copy of the license, usually to the <a href='https://creativecommons.org/licenses/by/4.0/'>canonical URL for the license</a>.
8
+
9
+ using:
10
+ caniuse: https://github.com/Fyrd/caniuse/blob/master/LICENSE
11
+ FiveThirtyEight data: https://github.com/fivethirtyeight/data/blob/master/LICENSE
12
+ Kubernetes documentation: https://github.com/kubernetes/website/blob/master/LICENSE
13
+
14
+ permissions:
15
+ - commercial-use
16
+ - modifications
17
+ - distribution
18
+ - private-use
19
+
20
+ conditions:
21
+ - include-copyright
22
+ - document-changes
23
+
24
+ limitations:
25
+ - liability
26
+ - trademark-use
27
+ - patent-use
28
+ - warranty
29
+
30
+ ---
31
+
32
+ Attribution 4.0 International
33
+
34
+ =======================================================================
35
+
36
+ Creative Commons Corporation ("Creative Commons") is not a law firm and
37
+ does not provide legal services or legal advice. Distribution of
38
+ Creative Commons public licenses does not create a lawyer-client or
39
+ other relationship. Creative Commons makes its licenses and related
40
+ information available on an "as-is" basis. Creative Commons gives no
41
+ warranties regarding its licenses, any material licensed under their
42
+ terms and conditions, or any related information. Creative Commons
43
+ disclaims all liability for damages resulting from their use to the
44
+ fullest extent possible.
45
+
46
+ Using Creative Commons Public Licenses
47
+
48
+ Creative Commons public licenses provide a standard set of terms and
49
+ conditions that creators and other rights holders may use to share
50
+ original works of authorship and other material subject to copyright
51
+ and certain other rights specified in the public license below. The
52
+ following considerations are for informational purposes only, are not
53
+ exhaustive, and do not form part of our licenses.
54
+
55
+ Considerations for licensors: Our public licenses are
56
+ intended for use by those authorized to give the public
57
+ permission to use material in ways otherwise restricted by
58
+ copyright and certain other rights. Our licenses are
59
+ irrevocable. Licensors should read and understand the terms
60
+ and conditions of the license they choose before applying it.
61
+ Licensors should also secure all rights necessary before
62
+ applying our licenses so that the public can reuse the
63
+ material as expected. Licensors should clearly mark any
64
+ material not subject to the license. This includes other CC-
65
+ licensed material, or material used under an exception or
66
+ limitation to copyright. More considerations for licensors:
67
+ wiki.creativecommons.org/Considerations_for_licensors
68
+
69
+ Considerations for the public: By using one of our public
70
+ licenses, a licensor grants the public permission to use the
71
+ licensed material under specified terms and conditions. If
72
+ the licensor's permission is not necessary for any reason--for
73
+ example, because of any applicable exception or limitation to
74
+ copyright--then that use is not regulated by the license. Our
75
+ licenses grant only permissions under copyright and certain
76
+ other rights that a licensor has authority to grant. Use of
77
+ the licensed material may still be restricted for other
78
+ reasons, including because others have copyright or other
79
+ rights in the material. A licensor may make special requests,
80
+ such as asking that all changes be marked or described.
81
+ Although not required by our licenses, you are encouraged to
82
+ respect those requests where reasonable. More considerations
83
+ for the public:
84
+ wiki.creativecommons.org/Considerations_for_licensees
85
+
86
+ =======================================================================
87
+
88
+ Creative Commons Attribution 4.0 International Public License
89
+
90
+ By exercising the Licensed Rights (defined below), You accept and agree
91
+ to be bound by the terms and conditions of this Creative Commons
92
+ Attribution 4.0 International Public License ("Public License"). To the
93
+ extent this Public License may be interpreted as a contract, You are
94
+ granted the Licensed Rights in consideration of Your acceptance of
95
+ these terms and conditions, and the Licensor grants You such rights in
96
+ consideration of benefits the Licensor receives from making the
97
+ Licensed Material available under these terms and conditions.
98
+
99
+
100
+ Section 1 -- Definitions.
101
+
102
+ a. Adapted Material means material subject to Copyright and Similar
103
+ Rights that is derived from or based upon the Licensed Material
104
+ and in which the Licensed Material is translated, altered,
105
+ arranged, transformed, or otherwise modified in a manner requiring
106
+ permission under the Copyright and Similar Rights held by the
107
+ Licensor. For purposes of this Public License, where the Licensed
108
+ Material is a musical work, performance, or sound recording,
109
+ Adapted Material is always produced where the Licensed Material is
110
+ synched in timed relation with a moving image.
111
+
112
+ b. Adapter's License means the license You apply to Your Copyright
113
+ and Similar Rights in Your contributions to Adapted Material in
114
+ accordance with the terms and conditions of this Public License.
115
+
116
+ c. Copyright and Similar Rights means copyright and/or similar rights
117
+ closely related to copyright including, without limitation,
118
+ performance, broadcast, sound recording, and Sui Generis Database
119
+ Rights, without regard to how the rights are labeled or
120
+ categorized. For purposes of this Public License, the rights
121
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
122
+ Rights.
123
+
124
+ d. Effective Technological Measures means those measures that, in the
125
+ absence of proper authority, may not be circumvented under laws
126
+ fulfilling obligations under Article 11 of the WIPO Copyright
127
+ Treaty adopted on December 20, 1996, and/or similar international
128
+ agreements.
129
+
130
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
131
+ any other exception or limitation to Copyright and Similar Rights
132
+ that applies to Your use of the Licensed Material.
133
+
134
+ f. Licensed Material means the artistic or literary work, database,
135
+ or other material to which the Licensor applied this Public
136
+ License.
137
+
138
+ g. Licensed Rights means the rights granted to You subject to the
139
+ terms and conditions of this Public License, which are limited to
140
+ all Copyright and Similar Rights that apply to Your use of the
141
+ Licensed Material and that the Licensor has authority to license.
142
+
143
+ h. Licensor means the individual(s) or entity(ies) granting rights
144
+ under this Public License.
145
+
146
+ i. Share means to provide material to the public by any means or
147
+ process that requires permission under the Licensed Rights, such
148
+ as reproduction, public display, public performance, distribution,
149
+ dissemination, communication, or importation, and to make material
150
+ available to the public including in ways that members of the
151
+ public may access the material from a place and at a time
152
+ individually chosen by them.
153
+
154
+ j. Sui Generis Database Rights means rights other than copyright
155
+ resulting from Directive 96/9/EC of the European Parliament and of
156
+ the Council of 11 March 1996 on the legal protection of databases,
157
+ as amended and/or succeeded, as well as other essentially
158
+ equivalent rights anywhere in the world.
159
+
160
+ k. You means the individual or entity exercising the Licensed Rights
161
+ under this Public License. Your has a corresponding meaning.
162
+
163
+
164
+ Section 2 -- Scope.
165
+
166
+ a. License grant.
167
+
168
+ 1. Subject to the terms and conditions of this Public License,
169
+ the Licensor hereby grants You a worldwide, royalty-free,
170
+ non-sublicensable, non-exclusive, irrevocable license to
171
+ exercise the Licensed Rights in the Licensed Material to:
172
+
173
+ a. reproduce and Share the Licensed Material, in whole or
174
+ in part; and
175
+
176
+ b. produce, reproduce, and Share Adapted Material.
177
+
178
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
179
+ Exceptions and Limitations apply to Your use, this Public
180
+ License does not apply, and You do not need to comply with
181
+ its terms and conditions.
182
+
183
+ 3. Term. The term of this Public License is specified in Section
184
+ 6(a).
185
+
186
+ 4. Media and formats; technical modifications allowed. The
187
+ Licensor authorizes You to exercise the Licensed Rights in
188
+ all media and formats whether now known or hereafter created,
189
+ and to make technical modifications necessary to do so. The
190
+ Licensor waives and/or agrees not to assert any right or
191
+ authority to forbid You from making technical modifications
192
+ necessary to exercise the Licensed Rights, including
193
+ technical modifications necessary to circumvent Effective
194
+ Technological Measures. For purposes of this Public License,
195
+ simply making modifications authorized by this Section 2(a)
196
+ (4) never produces Adapted Material.
197
+
198
+ 5. Downstream recipients.
199
+
200
+ a. Offer from the Licensor -- Licensed Material. Every
201
+ recipient of the Licensed Material automatically
202
+ receives an offer from the Licensor to exercise the
203
+ Licensed Rights under the terms and conditions of this
204
+ Public License.
205
+
206
+ b. No downstream restrictions. You may not offer or impose
207
+ any additional or different terms or conditions on, or
208
+ apply any Effective Technological Measures to, the
209
+ Licensed Material if doing so restricts exercise of the
210
+ Licensed Rights by any recipient of the Licensed
211
+ Material.
212
+
213
+ 6. No endorsement. Nothing in this Public License constitutes or
214
+ may be construed as permission to assert or imply that You
215
+ are, or that Your use of the Licensed Material is, connected
216
+ with, or sponsored, endorsed, or granted official status by,
217
+ the Licensor or others designated to receive attribution as
218
+ provided in Section 3(a)(1)(A)(i).
219
+
220
+ b. Other rights.
221
+
222
+ 1. Moral rights, such as the right of integrity, are not
223
+ licensed under this Public License, nor are publicity,
224
+ privacy, and/or other similar personality rights; however, to
225
+ the extent possible, the Licensor waives and/or agrees not to
226
+ assert any such rights held by the Licensor to the limited
227
+ extent necessary to allow You to exercise the Licensed
228
+ Rights, but not otherwise.
229
+
230
+ 2. Patent and trademark rights are not licensed under this
231
+ Public License.
232
+
233
+ 3. To the extent possible, the Licensor waives any right to
234
+ collect royalties from You for the exercise of the Licensed
235
+ Rights, whether directly or through a collecting society
236
+ under any voluntary or waivable statutory or compulsory
237
+ licensing scheme. In all other cases the Licensor expressly
238
+ reserves any right to collect such royalties.
239
+
240
+
241
+ Section 3 -- License Conditions.
242
+
243
+ Your exercise of the Licensed Rights is expressly made subject to the
244
+ following conditions.
245
+
246
+ a. Attribution.
247
+
248
+ 1. If You Share the Licensed Material (including in modified
249
+ form), You must:
250
+
251
+ a. retain the following if it is supplied by the Licensor
252
+ with the Licensed Material:
253
+
254
+ i. identification of the creator(s) of the Licensed
255
+ Material and any others designated to receive
256
+ attribution, in any reasonable manner requested by
257
+ the Licensor (including by pseudonym if
258
+ designated);
259
+
260
+ ii. a copyright notice;
261
+
262
+ iii. a notice that refers to this Public License;
263
+
264
+ iv. a notice that refers to the disclaimer of
265
+ warranties;
266
+
267
+ v. a URI or hyperlink to the Licensed Material to the
268
+ extent reasonably practicable;
269
+
270
+ b. indicate if You modified the Licensed Material and
271
+ retain an indication of any previous modifications; and
272
+
273
+ c. indicate the Licensed Material is licensed under this
274
+ Public License, and include the text of, or the URI or
275
+ hyperlink to, this Public License.
276
+
277
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
278
+ reasonable manner based on the medium, means, and context in
279
+ which You Share the Licensed Material. For example, it may be
280
+ reasonable to satisfy the conditions by providing a URI or
281
+ hyperlink to a resource that includes the required
282
+ information.
283
+
284
+ 3. If requested by the Licensor, You must remove any of the
285
+ information required by Section 3(a)(1)(A) to the extent
286
+ reasonably practicable.
287
+
288
+ 4. If You Share Adapted Material You produce, the Adapter's
289
+ License You apply must not prevent recipients of the Adapted
290
+ Material from complying with this Public License.
291
+
292
+
293
+ Section 4 -- Sui Generis Database Rights.
294
+
295
+ Where the Licensed Rights include Sui Generis Database Rights that
296
+ apply to Your use of the Licensed Material:
297
+
298
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
299
+ to extract, reuse, reproduce, and Share all or a substantial
300
+ portion of the contents of the database;
301
+
302
+ b. if You include all or a substantial portion of the database
303
+ contents in a database in which You have Sui Generis Database
304
+ Rights, then the database in which You have Sui Generis Database
305
+ Rights (but not its individual contents) is Adapted Material; and
306
+
307
+ c. You must comply with the conditions in Section 3(a) if You Share
308
+ all or a substantial portion of the contents of the database.
309
+
310
+ For the avoidance of doubt, this Section 4 supplements and does not
311
+ replace Your obligations under this Public License where the Licensed
312
+ Rights include other Copyright and Similar Rights.
313
+
314
+
315
+ Section 5 -- Disclaimer of Warranties and Limitation of Liability.
316
+
317
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
318
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
319
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
320
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
321
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
322
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
323
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
324
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
325
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
326
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
327
+
328
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
329
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
330
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
331
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
332
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
333
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
334
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
335
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
336
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
337
+
338
+ c. The disclaimer of warranties and limitation of liability provided
339
+ above shall be interpreted in a manner that, to the extent
340
+ possible, most closely approximates an absolute disclaimer and
341
+ waiver of all liability.
342
+
343
+
344
+ Section 6 -- Term and Termination.
345
+
346
+ a. This Public License applies for the term of the Copyright and
347
+ Similar Rights licensed here. However, if You fail to comply with
348
+ this Public License, then Your rights under this Public License
349
+ terminate automatically.
350
+
351
+ b. Where Your right to use the Licensed Material has terminated under
352
+ Section 6(a), it reinstates:
353
+
354
+ 1. automatically as of the date the violation is cured, provided
355
+ it is cured within 30 days of Your discovery of the
356
+ violation; or
357
+
358
+ 2. upon express reinstatement by the Licensor.
359
+
360
+ For the avoidance of doubt, this Section 6(b) does not affect any
361
+ right the Licensor may have to seek remedies for Your violations
362
+ of this Public License.
363
+
364
+ c. For the avoidance of doubt, the Licensor may also offer the
365
+ Licensed Material under separate terms or conditions or stop
366
+ distributing the Licensed Material at any time; however, doing so
367
+ will not terminate this Public License.
368
+
369
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
370
+ License.
371
+
372
+
373
+ Section 7 -- Other Terms and Conditions.
374
+
375
+ a. The Licensor shall not be bound by any additional or different
376
+ terms or conditions communicated by You unless expressly agreed.
377
+
378
+ b. Any arrangements, understandings, or agreements regarding the
379
+ Licensed Material not stated herein are separate from and
380
+ independent of the terms and conditions of this Public License.
381
+
382
+
383
+ Section 8 -- Interpretation.
384
+
385
+ a. For the avoidance of doubt, this Public License does not, and
386
+ shall not be interpreted to, reduce, limit, restrict, or impose
387
+ conditions on any use of the Licensed Material that could lawfully
388
+ be made without permission under this Public License.
389
+
390
+ b. To the extent possible, if any provision of this Public License is
391
+ deemed unenforceable, it shall be automatically reformed to the
392
+ minimum extent necessary to make it enforceable. If the provision
393
+ cannot be reformed, it shall be severed from this Public License
394
+ without affecting the enforceability of the remaining terms and
395
+ conditions.
396
+
397
+ c. No term or condition of this Public License will be waived and no
398
+ failure to comply consented to unless expressly agreed to by the
399
+ Licensor.
400
+
401
+ d. Nothing in this Public License constitutes or may be interpreted
402
+ as a limitation upon, or waiver of, any privileges and immunities
403
+ that apply to the Licensor or You, including from the legal
404
+ processes of any jurisdiction or authority.
405
+
406
+
407
+ =======================================================================
408
+
409
+ Creative Commons is not a party to its public licenses.
410
+ Notwithstanding, Creative Commons may elect to apply one of its public
411
+ licenses to material it publishes and in those instances will be
412
+ considered the “Licensor.” The text of the Creative Commons public
413
+ licenses is dedicated to the public domain under the CC0 Public Domain
414
+ Dedication. Except for the limited purpose of indicating that material
415
+ is shared under a Creative Commons public license or as otherwise
416
+ permitted by the Creative Commons policies published at
417
+ creativecommons.org/policies, Creative Commons does not authorize the
418
+ use of the trademark "Creative Commons" or any other trademark or logo
419
+ of Creative Commons without its prior written consent including,
420
+ without limitation, in connection with any unauthorized modifications
421
+ to any of its public licenses or any other arrangements,
422
+ understandings, or agreements concerning use of licensed material. For
423
+ the avoidance of doubt, this paragraph does not form part of the public
424
+ licenses.
425
+
426
+ Creative Commons may be contacted at creativecommons.org.
NOTICE.md ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Attribution and license scope
2
+
3
+ This is a mixed-license-scope repository. Fluid Inference intends the included
4
+ CC-BY-4.0 license text to cover only the following exact Community-1-derived
5
+ artifacts and their uncompiled counterparts listed in `provenance.json`:
6
+
7
+ - `Segmentation.mlmodelc`
8
+ - `FBank.mlmodelc`
9
+ - `Embedding.mlmodelc`
10
+ - `PLDA.mlmodelc`
11
+ - `PldaRho.mlmodelc`
12
+ - `plda-parameters.json`
13
+ - `xvector-transform.json`
14
+
15
+ The underlying Community-1 pipeline is published by pyannote under CC-BY-4.0:
16
+ https://huggingface.co/pyannote/speaker-diarization-community-1
17
+
18
+ The PLDA parameters originate from Brno University of Technology / BUT
19
+ Speech@FIT. The rights holder explicitly licenses `plda.npz` and
20
+ `xvec_transform.npz` under CC-BY-4.0, including commercial use:
21
+ https://huggingface.co/BUT-FIT/diarizen-wavlm-large-s80-md/blob/6285693ddd5b38e8229acb93f864f3d04a82bee1/plda/LICENSE
22
+
23
+ Fluid Inference converted the PyTorch components to Core ML, introduced fixed
24
+ and enumerated input shapes, applied mixed-precision storage where recorded in
25
+ the model metadata, separated the FBank frontend from the embedding backend,
26
+ and compiled packages for Apple platforms.
27
+
28
+ Appropriate attribution should identify pyannote, WeSpeaker, BUT Speech@FIT,
29
+ and Fluid Inference, retain the citations in README.md, link CC-BY-4.0, and
30
+ indicate that the files are modified Core ML conversions.
31
+
32
+ ## Legacy artifacts
33
+
34
+ `pyannote_segmentation.mlmodelc`, `wespeaker.mlmodelc`,
35
+ `wespeaker_v2.mlmodelc`, `wespeaker_int8.mlmodelc`, and their packages predate
36
+ the Community-1 artifact set and are not covered by the Community-1 scope
37
+ above. They are Core ML conversions of the pyannote/speaker-diarization-3.1
38
+ components, under their own upstream licenses:
39
+
40
+ | Artifact | Upstream checkpoint | License |
41
+ |---|---|---|
42
+ | `pyannote_segmentation` | [`pyannote/segmentation-3.0`](https://huggingface.co/pyannote/segmentation-3.0) @ `e66f3d3b` (Copyright (c) 2023 CNRS) | MIT |
43
+ | `wespeaker` (fp32) | [`pyannote/wespeaker-voxceleb-resnet34-LM`](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM) @ `837717dd`, wrapping WeSpeaker's VoxCeleb ResNet34-LM | CC-BY-4.0 |
44
+ | `wespeaker_v2`, `wespeaker_int8` (byte-identical; 8-bit palettized weights) | same as `wespeaker` | CC-BY-4.0 |
45
+
46
+ The original conversion scripts were not preserved, so this was confirmed by
47
+ output parity on AMI ES2004a against the PyTorch checkpoints above (pyannote.audio
48
+ 3.3.2, CPU): segmentation frame-level argmax agreement 99.98%; speaker
49
+ embeddings cosine 1.0000 (`wespeaker`) and >= 0.997 (`wespeaker_v2`/`wespeaker_int8`).
50
+
51
+ Fluid Inference converted these checkpoints to Core ML with fixed input shapes,
52
+ fused the fbank frontend into the embedding model, and palettized the
53
+ `wespeaker_v2`/`wespeaker_int8` weights to 8 bits. Attribution for the
54
+ embedding models should identify WeSpeaker, pyannote, and Fluid Inference,
55
+ link CC-BY-4.0, and indicate that the files are modified Core ML conversions.
56
+ The segmentation model's MIT notice is reproduced below.
57
+
58
+ ```
59
+ MIT License
60
+
61
+ Copyright (c) 2023 CNRS
62
+
63
+ Permission is hereby granted, free of charge, to any person obtaining a copy
64
+ of this software and associated documentation files (the "Software"), to deal
65
+ in the Software without restriction, including without limitation the rights
66
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
67
+ copies of the Software, and to permit persons to whom the Software is
68
+ furnished to do so, subject to the following conditions:
69
+
70
+ The above copyright notice and this permission notice shall be included in all
71
+ copies or substantial portions of the Software.
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
75
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
76
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
77
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
78
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
79
+ SOFTWARE.
80
+ ```
81
+
82
+ Fluid Inference can grant rights only to the extent it is authorized to do so.
83
+ This notice does not restrict or replace rights granted directly by upstream
84
+ licensors.
PLDA.mlmodelc/metadata.json ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "shortDescription" : "pyannote community-1 PLDA transformation (x-vector whitening + PLDA projection)",
4
+ "metadataOutputVersion" : "3.0",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32 1 × 128)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 128]",
13
+ "name" : "plda_features",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "version" : "pyannote-speaker-diarization-community-1",
18
+ "modelParameters" : [
19
+
20
+ ],
21
+ "author" : "Fluid Inference",
22
+ "specificationVersion" : 8,
23
+ "storagePrecision" : "Float32",
24
+ "license" : "CC-BY-4.0",
25
+ "mlProgramOperationTypeHistogram" : {
26
+ "Ios16.reduceSum" : 2,
27
+ "Ios17.clip" : 2,
28
+ "Ios17.sqrt" : 2,
29
+ "Ios17.linear" : 2,
30
+ "Ios17.realDiv" : 2,
31
+ "Ios17.mul" : 4,
32
+ "Ios17.sub" : 3
33
+ },
34
+ "computePrecision" : "Mixed (Float32, Int32)",
35
+ "stateSchema" : [
36
+
37
+ ],
38
+ "isUpdatable" : "0",
39
+ "availability" : {
40
+ "macOS" : "14.0",
41
+ "tvOS" : "17.0",
42
+ "visionOS" : "1.0",
43
+ "watchOS" : "10.0",
44
+ "iOS" : "17.0",
45
+ "macCatalyst" : "17.0"
46
+ },
47
+ "modelType" : {
48
+ "name" : "MLModelType_mlProgram"
49
+ },
50
+ "inputSchema" : [
51
+ {
52
+ "hasShapeFlexibility" : "0",
53
+ "isOptional" : "0",
54
+ "dataType" : "Float32",
55
+ "formattedType" : "MultiArray (Float32 1 × 256)",
56
+ "shortDescription" : "",
57
+ "shape" : "[1, 256]",
58
+ "name" : "embeddings",
59
+ "type" : "MultiArray"
60
+ }
61
+ ],
62
+ "userDefinedMetadata" : {
63
+ "com.github.apple.coremltools.conversion_date" : "2025-10-01",
64
+ "com.github.apple.coremltools.source" : "torch==2.8.0",
65
+ "com.github.apple.coremltools.version" : "9.0b1",
66
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
67
+ },
68
+ "generatedClassName" : "plda_community_1",
69
+ "method" : "predict"
70
+ }
71
+ ]
PLDA.mlmodelc/model.mil ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [1, 256]> embeddings) {
5
+ tensor<fp32, [128, 128]> plda_tr = const()[name = tensor<string, []>("plda_tr"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
6
+ tensor<fp32, [128]> mu = const()[name = tensor<string, []>("mu"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(65664)))];
7
+ tensor<fp32, []> lda_dim_scale = const()[name = tensor<string, []>("lda_dim_scale"), val = tensor<fp32, []>(0x1.6a09e6p+3)];
8
+ tensor<fp32, [128]> mean2 = const()[name = tensor<string, []>("mean2"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66240)))];
9
+ tensor<fp32, []> lda_scale = const()[name = tensor<string, []>("lda_scale"), val = tensor<fp32, []>(0x1p+4)];
10
+ tensor<fp32, [256]> mean1 = const()[name = tensor<string, []>("mean1"), val = tensor<fp32, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66816)))];
11
+ tensor<fp32, [1, 256]> x_1 = sub(x = embeddings, y = mean1)[name = tensor<string, []>("x_1")];
12
+ tensor<fp32, [1, 256]> var_11 = mul(x = x_1, y = x_1)[name = tensor<string, []>("op_11")];
13
+ tensor<int32, [1]> var_16_axes_0 = const()[name = tensor<string, []>("op_16_axes_0"), val = tensor<int32, [1]>([-1])];
14
+ tensor<bool, []> var_16_keep_dims_0 = const()[name = tensor<string, []>("op_16_keep_dims_0"), val = tensor<bool, []>(true)];
15
+ tensor<fp32, [1, 1]> var_16 = reduce_sum(axes = var_16_axes_0, keep_dims = var_16_keep_dims_0, x = var_11)[name = tensor<string, []>("op_16")];
16
+ tensor<fp32, []> var_17 = const()[name = tensor<string, []>("op_17"), val = tensor<fp32, []>(0x1.197998p-40)];
17
+ tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x1.fffffep+127)];
18
+ tensor<fp32, [1, 1]> clip_0 = clip(alpha = var_17, beta = const_0, x = var_16)[name = tensor<string, []>("clip_0")];
19
+ tensor<fp32, [1, 1]> norm_1 = sqrt(x = clip_0)[name = tensor<string, []>("norm_1")];
20
+ tensor<fp32, [1, 256]> normalized1 = real_div(x = x_1, y = norm_1)[name = tensor<string, []>("normalized1")];
21
+ tensor<fp32, [128, 256]> transpose_0 = const()[name = tensor<string, []>("transpose_0"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(67904)))];
22
+ tensor<fp32, [128]> var_22_bias_0 = const()[name = tensor<string, []>("op_22_bias_0"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(199040)))];
23
+ tensor<fp32, [1, 128]> var_22 = linear(bias = var_22_bias_0, weight = transpose_0, x = normalized1)[name = tensor<string, []>("op_22")];
24
+ tensor<fp32, [1, 128]> projected = mul(x = var_22, y = lda_scale)[name = tensor<string, []>("projected")];
25
+ tensor<fp32, [1, 128]> x = sub(x = projected, y = mean2)[name = tensor<string, []>("x")];
26
+ tensor<fp32, [1, 128]> var_26 = mul(x = x, y = x)[name = tensor<string, []>("op_26")];
27
+ tensor<int32, [1]> var_31_axes_0 = const()[name = tensor<string, []>("op_31_axes_0"), val = tensor<int32, [1]>([-1])];
28
+ tensor<bool, []> var_31_keep_dims_0 = const()[name = tensor<string, []>("op_31_keep_dims_0"), val = tensor<bool, []>(true)];
29
+ tensor<fp32, [1, 1]> var_31 = reduce_sum(axes = var_31_axes_0, keep_dims = var_31_keep_dims_0, x = var_26)[name = tensor<string, []>("op_31")];
30
+ tensor<fp32, []> var_32 = const()[name = tensor<string, []>("op_32"), val = tensor<fp32, []>(0x1.197998p-40)];
31
+ tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x1.fffffep+127)];
32
+ tensor<fp32, [1, 1]> clip_1 = clip(alpha = var_32, beta = const_1, x = var_31)[name = tensor<string, []>("clip_1")];
33
+ tensor<fp32, [1, 1]> norm = sqrt(x = clip_1)[name = tensor<string, []>("norm")];
34
+ tensor<fp32, [1, 128]> var_36 = real_div(x = x, y = norm)[name = tensor<string, []>("op_36")];
35
+ tensor<fp32, [1, 128]> normalized2 = mul(x = var_36, y = lda_dim_scale)[name = tensor<string, []>("normalized2")];
36
+ tensor<fp32, [1, 128]> plda_centered = sub(x = normalized2, y = mu)[name = tensor<string, []>("plda_centered")];
37
+ tensor<fp32, [1, 128]> plda_features = linear(bias = var_22_bias_0, weight = plda_tr, x = plda_centered)[name = tensor<string, []>("op_41")];
38
+ } -> (plda_features);
39
+ }
PROVENANCE.md ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Community-1 artifact provenance
2
+
3
+ This document covers the supported Community-1 artifacts in repository snapshot
4
+ `1ed7a662fdc7109e36d822db793ee6eebdaf8594`. Exact artifact hashes are recorded
5
+ in `provenance.json`.
6
+
7
+ ## Source mapping
8
+
9
+ | Converted artifact | Upstream input |
10
+ | --- | --- |
11
+ | `Segmentation` | `segmentation/pytorch_model.bin` |
12
+ | `Embedding` | `embedding/pytorch_model.bin` (WeSpeaker ResNet34) |
13
+ | `FBank` | Feature-extraction graph configured from the embedding checkpoint; no separate learned checkpoint |
14
+ | `PLDA`, `PldaRho` | `plda/plda.npz`, `plda/xvec_transform.npz` |
15
+ | PLDA JSON resources | The same two NPZ files, serialized as Float32 tensors |
16
+
17
+ The immutable upstream reference snapshot is
18
+ `pyannote/speaker-diarization-community-1@3533c8cf8e369892e6b79ff1bf80f7b0286a54ee`.
19
+ Its relevant file history identifies checkpoint commit
20
+ `5428423440de6baac451412694bb79a0ad644bea` and PLDA import commit
21
+ `7aa6699f402495053a3898e112874cb3e68ee064`.
22
+
23
+ The PLDA files are byte-identical to the BUT Speech@FIT files with these hashes:
24
+
25
+ | File | SHA-256 |
26
+ | --- | --- |
27
+ | `plda.npz` | `9b77bcd840692710dd3496f62ecfeed8d8e5f002fd991b785079b244eab7d255` |
28
+ | `xvec_transform.npz` | `325f1ce8e48f7e55e9c8aa47e05d2766b7c48c4b25b8de8dd751e7a4cc5fbe8f` |
29
+
30
+ All six tensors in the two published JSON resources exactly match these inputs
31
+ after conversion to Float32. The six constants derived by the published PLDA
32
+ transformation also occur byte-for-byte in `PldaRho.mlmodelc` at the locations
33
+ referenced by its MIL graph.
34
+
35
+ ## Recorded conversion environment
36
+
37
+ The modern artifacts record:
38
+
39
+ - PyTorch 2.8.0
40
+ - coremltools 9.0b1
41
+ - TorchScript source dialect
42
+ - coremlc 3500.32.1
43
+ - MIL component 3500.14.1
44
+
45
+ The public conversion reference is Mobius commit
46
+ `33fd6eab634966ae7db4d73da3376a90379642fb`, including conversion and
47
+ compilation scripts plus the locked Python environment. That commit postdates
48
+ the artifact conversion dates, so it is a reference implementation rather than
49
+ an attestation of the exact historical build.
50
+
51
+ ## Reproducible successor pipeline
52
+
53
+ Mobius commit `ffbc3c8cae2d0ac83912a005a25a2874ced98a3a` adds a release command that:
54
+
55
+ 1. Rejects mutable or abbreviated upstream revisions.
56
+ 2. Downloads material inputs from the selected immutable revision.
57
+ 3. Embeds source paths, hashes, upstream revision, and converter revision in the
58
+ generated Core ML packages and JSON resources.
59
+ 4. Compiles the packages and emits `provenance.json` containing every input and
60
+ output SHA-256 plus the build environment and commands.
61
+ 5. Refuses release builds from a dirty converter checkout.
62
+
63
+ Example:
64
+
65
+ ```bash
66
+ uv run python build-release.py \
67
+ --upstream-revision 3533c8cf8e369892e6b79ff1bf80f7b0286a54ee \
68
+ --work-dir ./build/community-1-3533c8cf \
69
+ --release-dir ./build/release-3533c8cf \
70
+ --selective-fp16
71
+ ```
72
+
73
+ Access to the gated upstream model and acceptance of its user conditions are
74
+ required.
75
+
76
+ ## Historical limitations
77
+
78
+ - The exact upstream checkout used for the original 2025 segmentation and
79
+ embedding exports was not recorded.
80
+ - The exact historical converter commit, invocation, Xcode installation, and
81
+ SDK were not recorded.
82
+ - The existing segmentation and embedding artifacts therefore remain
83
+ historically reconstructed, not build-attested.
84
+ - The older `pyannote_segmentation` and `wespeaker*` artifacts are outside this
85
+ document's scope.
PldaRho.mlmodelc/metadata.json ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "shortDescription" : "pyannote community-1 PLDA rho (features scaled by sqrt(phi) for VBx clustering, batch 1-32)",
4
+ "metadataOutputVersion" : "3.0",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "rho",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "version" : "pyannote-speaker-diarization-community-1",
18
+ "modelParameters" : [
19
+
20
+ ],
21
+ "author" : "Fluid Inference",
22
+ "specificationVersion" : 8,
23
+ "storagePrecision" : "Float32",
24
+ "license" : "CC-BY-4.0",
25
+ "mlProgramOperationTypeHistogram" : {
26
+ "Ios16.reduceSum" : 2,
27
+ "Ios17.clip" : 2,
28
+ "Ios17.sqrt" : 2,
29
+ "Ios17.linear" : 2,
30
+ "Ios17.realDiv" : 2,
31
+ "Ios17.mul" : 5,
32
+ "Ios17.sub" : 3
33
+ },
34
+ "computePrecision" : "Mixed (Float32, Int32)",
35
+ "stateSchema" : [
36
+
37
+ ],
38
+ "isUpdatable" : "0",
39
+ "availability" : {
40
+ "macOS" : "14.0",
41
+ "tvOS" : "17.0",
42
+ "visionOS" : "1.0",
43
+ "watchOS" : "10.0",
44
+ "iOS" : "17.0",
45
+ "macCatalyst" : "17.0"
46
+ },
47
+ "modelType" : {
48
+ "name" : "MLModelType_mlProgram"
49
+ },
50
+ "inputSchema" : [
51
+ {
52
+ "shortDescription" : "",
53
+ "dataType" : "Float32",
54
+ "hasShapeFlexibility" : "1",
55
+ "isOptional" : "0",
56
+ "shapeFlexibility" : "32 × 256 | 1 × 256 | 2 × 256 | 3 × 256 | 4 × 256 | 5 × 256 | 6 × 256 | 7 × 256 | 8 × 256 | 9 × 256 | 10 × 256 | 11 × 256 | 12 × 256 | 13 × 256 | 14 × 256 | 15 × 256 | 16 × 256 | 17 × 256 | 18 × 256 | 19 × 256 | 20 × 256 | 21 × 256 | 22 × 256 | 23 × 256 | 24 × 256 | 25 × 256 | 26 × 256 | 27 × 256 | 28 × 256 | 29 × 256 | 30 × 256 | 31 × 256",
57
+ "formattedType" : "MultiArray (Float32 32 × 256)",
58
+ "type" : "MultiArray",
59
+ "shape" : "[32, 256]",
60
+ "name" : "embeddings",
61
+ "enumeratedShapes" : "[[32, 256], [1, 256], [2, 256], [3, 256], [4, 256], [5, 256], [6, 256], [7, 256], [8, 256], [9, 256], [10, 256], [11, 256], [12, 256], [13, 256], [14, 256], [15, 256], [16, 256], [17, 256], [18, 256], [19, 256], [20, 256], [21, 256], [22, 256], [23, 256], [24, 256], [25, 256], [26, 256], [27, 256], [28, 256], [29, 256], [30, 256], [31, 256]]"
62
+ }
63
+ ],
64
+ "userDefinedMetadata" : {
65
+ "com.github.apple.coremltools.conversion_date" : "2025-10-04",
66
+ "com.github.apple.coremltools.source" : "torch==2.8.0",
67
+ "com.github.apple.coremltools.version" : "9.0b1",
68
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
69
+ },
70
+ "generatedClassName" : "plda_rho_community_1",
71
+ "method" : "predict"
72
+ }
73
+ ]
PldaRho.mlmodelc/model.mil ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [?, 256]> embeddings) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"embeddings", [32, 256]}}), ("EnumeratedShapes", {{"embeddings_1_1_1_10_256_", {{"embeddings", [10, 256]}}}, {"embeddings_1_1_1_11_256_", {{"embeddings", [11, 256]}}}, {"embeddings_1_1_1_12_256_", {{"embeddings", [12, 256]}}}, {"embeddings_1_1_1_13_256_", {{"embeddings", [13, 256]}}}, {"embeddings_1_1_1_14_256_", {{"embeddings", [14, 256]}}}, {"embeddings_1_1_1_15_256_", {{"embeddings", [15, 256]}}}, {"embeddings_1_1_1_16_256_", {{"embeddings", [16, 256]}}}, {"embeddings_1_1_1_17_256_", {{"embeddings", [17, 256]}}}, {"embeddings_1_1_1_18_256_", {{"embeddings", [18, 256]}}}, {"embeddings_1_1_1_19_256_", {{"embeddings", [19, 256]}}}, {"embeddings_1_1_1_1_256_", {{"embeddings", [1, 256]}}}, {"embeddings_1_1_1_20_256_", {{"embeddings", [20, 256]}}}, {"embeddings_1_1_1_21_256_", {{"embeddings", [21, 256]}}}, {"embeddings_1_1_1_22_256_", {{"embeddings", [22, 256]}}}, {"embeddings_1_1_1_23_256_", {{"embeddings", [23, 256]}}}, {"embeddings_1_1_1_24_256_", {{"embeddings", [24, 256]}}}, {"embeddings_1_1_1_25_256_", {{"embeddings", [25, 256]}}}, {"embeddings_1_1_1_26_256_", {{"embeddings", [26, 256]}}}, {"embeddings_1_1_1_27_256_", {{"embeddings", [27, 256]}}}, {"embeddings_1_1_1_28_256_", {{"embeddings", [28, 256]}}}, {"embeddings_1_1_1_29_256_", {{"embeddings", [29, 256]}}}, {"embeddings_1_1_1_2_256_", {{"embeddings", [2, 256]}}}, {"embeddings_1_1_1_30_256_", {{"embeddings", [30, 256]}}}, {"embeddings_1_1_1_31_256_", {{"embeddings", [31, 256]}}}, {"embeddings_1_1_1_32_256_", {{"embeddings", [32, 256]}}}, {"embeddings_1_1_1_3_256_", {{"embeddings", [3, 256]}}}, {"embeddings_1_1_1_4_256_", {{"embeddings", [4, 256]}}}, {"embeddings_1_1_1_5_256_", {{"embeddings", [5, 256]}}}, {"embeddings_1_1_1_6_256_", {{"embeddings", [6, 256]}}}, {"embeddings_1_1_1_7_256_", {{"embeddings", [7, 256]}}}, {"embeddings_1_1_1_8_256_", {{"embeddings", [8, 256]}}}, {"embeddings_1_1_1_9_256_", {{"embeddings", [9, 256]}}}})))] {
5
+ tensor<fp32, [128]> sqrt_phi = const()[name = tensor<string, []>("sqrt_phi"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
6
+ tensor<fp32, [128, 128]> transform_plda_tr = const()[name = tensor<string, []>("transform_plda_tr"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(640)))];
7
+ tensor<fp32, [128]> transform_mu = const()[name = tensor<string, []>("transform_mu"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66240)))];
8
+ tensor<fp32, []> transform_lda_dim_scale = const()[name = tensor<string, []>("transform_lda_dim_scale"), val = tensor<fp32, []>(0x1.6a09e6p+3)];
9
+ tensor<fp32, [128]> transform_mean2 = const()[name = tensor<string, []>("transform_mean2"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(66816)))];
10
+ tensor<fp32, []> transform_lda_scale = const()[name = tensor<string, []>("transform_lda_scale"), val = tensor<fp32, []>(0x1p+4)];
11
+ tensor<fp32, [256]> transform_mean1 = const()[name = tensor<string, []>("transform_mean1"), val = tensor<fp32, [256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(67392)))];
12
+ tensor<fp32, []> var_4 = const()[name = tensor<string, []>("op_4"), val = tensor<fp32, []>(0x1.197998p-40)];
13
+ tensor<fp32, [?, 256]> x_1 = sub(x = embeddings, y = transform_mean1)[name = tensor<string, []>("x_1")];
14
+ tensor<fp32, [?, 256]> var_17 = mul(x = x_1, y = x_1)[name = tensor<string, []>("op_17")];
15
+ tensor<int32, [1]> var_19_axes_0 = const()[name = tensor<string, []>("op_19_axes_0"), val = tensor<int32, [1]>([-1])];
16
+ tensor<bool, []> var_19_keep_dims_0 = const()[name = tensor<string, []>("op_19_keep_dims_0"), val = tensor<bool, []>(true)];
17
+ tensor<fp32, [?, 1]> var_19 = reduce_sum(axes = var_19_axes_0, keep_dims = var_19_keep_dims_0, x = var_17)[name = tensor<string, []>("op_19")];
18
+ tensor<fp32, []> const_0 = const()[name = tensor<string, []>("const_0"), val = tensor<fp32, []>(0x1.fffffep+127)];
19
+ tensor<fp32, [?, 1]> clip_0 = clip(alpha = var_4, beta = const_0, x = var_19)[name = tensor<string, []>("clip_0")];
20
+ tensor<fp32, [?, 1]> norm_1 = sqrt(x = clip_0)[name = tensor<string, []>("norm_1")];
21
+ tensor<fp32, [?, 256]> normalized1 = real_div(x = x_1, y = norm_1)[name = tensor<string, []>("normalized1")];
22
+ tensor<fp32, [128, 256]> transpose_0 = const()[name = tensor<string, []>("transpose_0"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(68480)))];
23
+ tensor<fp32, [128]> var_23_bias_0 = const()[name = tensor<string, []>("op_23_bias_0"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(199616)))];
24
+ tensor<fp32, [?, 128]> var_23 = linear(bias = var_23_bias_0, weight = transpose_0, x = normalized1)[name = tensor<string, []>("op_23")];
25
+ tensor<fp32, [?, 128]> projected = mul(x = var_23, y = transform_lda_scale)[name = tensor<string, []>("projected")];
26
+ tensor<fp32, [?, 128]> x = sub(x = projected, y = transform_mean2)[name = tensor<string, []>("x")];
27
+ tensor<fp32, [?, 128]> var_26 = mul(x = x, y = x)[name = tensor<string, []>("op_26")];
28
+ tensor<int32, [1]> var_28_axes_0 = const()[name = tensor<string, []>("op_28_axes_0"), val = tensor<int32, [1]>([-1])];
29
+ tensor<bool, []> var_28_keep_dims_0 = const()[name = tensor<string, []>("op_28_keep_dims_0"), val = tensor<bool, []>(true)];
30
+ tensor<fp32, [?, 1]> var_28 = reduce_sum(axes = var_28_axes_0, keep_dims = var_28_keep_dims_0, x = var_26)[name = tensor<string, []>("op_28")];
31
+ tensor<fp32, []> const_1 = const()[name = tensor<string, []>("const_1"), val = tensor<fp32, []>(0x1.fffffep+127)];
32
+ tensor<fp32, [?, 1]> clip_1 = clip(alpha = var_4, beta = const_1, x = var_28)[name = tensor<string, []>("clip_1")];
33
+ tensor<fp32, [?, 1]> norm = sqrt(x = clip_1)[name = tensor<string, []>("norm")];
34
+ tensor<fp32, [?, 128]> var_31 = real_div(x = x, y = norm)[name = tensor<string, []>("op_31")];
35
+ tensor<fp32, [?, 128]> normalized2 = mul(x = var_31, y = transform_lda_dim_scale)[name = tensor<string, []>("normalized2")];
36
+ tensor<fp32, [?, 128]> plda_centered = sub(x = normalized2, y = transform_mu)[name = tensor<string, []>("plda_centered")];
37
+ tensor<fp32, [?, 128]> features = linear(bias = var_23_bias_0, weight = transform_plda_tr, x = plda_centered)[name = tensor<string, []>("features")];
38
+ tensor<fp32, [?, 128]> rho = mul(x = features, y = sqrt_phi)[name = tensor<string, []>("op_36")];
39
+ } -> (rho);
40
+ }
README.md ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: scoped-cc-by-4.0
4
+ license_link: https://huggingface.co/FluidInference/speaker-diarization-coreml/blob/main/NOTICE.md
5
+ tags:
6
+ - speech
7
+ - audio
8
+ - voice
9
+ - speaker-diarization
10
+ - speaker-change-detection
11
+ - coreml
12
+ - speaker-segmentation
13
+ base_model:
14
+ - pyannote/speaker-diarization-community-1
15
+ pipeline_tag: voice-activity-detection
16
+ ---
17
+
18
+ > Mirror of FluidInference/speaker-diarization-coreml at revision 7eab74f3463c736418d0eb10296261ae581146c9, kept by the PrivateWispr team as a backup host. Licence: scoped CC-BY-4.0 (mixed-licence repo; see NOTICE.md and LICENSE, kept unchanged). Original authors: pyannote (Community-1 pipeline, segmentation-3.0), WeSpeaker, BUT Speech@FIT (PLDA parameters) and FluidInference (Core ML conversions, modified from the originals). All model files are byte-identical to the upstream revision; only this header was added to the README.
19
+
20
+ # Speaker Diarization Core ML
21
+
22
+ Core ML conversions used by
23
+ [FluidAudio](https://github.com/FluidInference/FluidAudio) for on-device speaker
24
+ diarization on Apple platforms.
25
+
26
+ The supported Community-1 artifact set is distributed under CC-BY-4.0. See
27
+ [NOTICE.md](NOTICE.md) for attribution and the precise license scope, and
28
+ [PROVENANCE.md](PROVENANCE.md) plus [provenance.json](provenance.json) for
29
+ source, conversion, environment, and file-integrity records.
30
+
31
+ ## Supported Community-1 artifacts
32
+
33
+ | Artifact | Source |
34
+ | --- | --- |
35
+ | `Segmentation.mlmodelc` | `pyannote/speaker-diarization-community-1/segmentation/pytorch_model.bin` |
36
+ | `FBank.mlmodelc` | Deterministic feature-extraction graph configured from the embedding checkpoint |
37
+ | `Embedding.mlmodelc` | `pyannote/speaker-diarization-community-1/embedding/pytorch_model.bin` |
38
+ | `PLDA.mlmodelc`, `PldaRho.mlmodelc` | `plda/plda.npz` and `plda/xvec_transform.npz` |
39
+ | `plda-parameters.json`, `xvector-transform.json` | Serialized tensors from the same two PLDA files |
40
+
41
+ The snapshot includes uncompiled packages for `Segmentation`, `FBank`,
42
+ `Embedding`, and `PldaRho` under `mlpackages/`; no uncompiled `PLDA` package was
43
+ published. These are Core ML conversions, not fine-tuned models.
44
+
45
+ ## Provenance status
46
+
47
+ The artifacts are pinned by SHA-256 in `provenance.json`. Their historical
48
+ source lineage has been reconstructed from the public Community-1 repository,
49
+ artifact metadata, and the published conversion source. The exact local
50
+ upstream checkout and Mobius commit used for the original 2025 conversion were
51
+ not recorded, so the existing binaries are not described as a fully attested
52
+ reproducible build.
53
+
54
+ The immutable upstream reference used for reconstruction is
55
+ [`pyannote/speaker-diarization-community-1@3533c8cf`](https://huggingface.co/pyannote/speaker-diarization-community-1/tree/3533c8cf8e369892e6b79ff1bf80f7b0286a54ee).
56
+ The public historical conversion reference is
57
+ [`FluidInference/mobius@33fd6eab`](https://github.com/FluidInference/mobius/tree/33fd6eab634966ae7db4d73da3376a90379642fb/models/speaker-diarization/pyannote-community-1/coreml).
58
+
59
+ The current conversion pipeline requires a full upstream commit SHA, records
60
+ input and output hashes, embeds source metadata in each model, and captures the
61
+ build environment. It is available at
62
+ [`FluidInference/mobius@ffbc3c8`](https://github.com/FluidInference/mobius/tree/ffbc3c8cae2d0ac83912a005a25a2874ced98a3a/models/speaker-diarization/pyannote-community-1/coreml).
63
+
64
+ ## Legacy compatibility artifacts
65
+
66
+ The repository also retains `pyannote_segmentation.mlmodelc`,
67
+ `wespeaker.mlmodelc`, `wespeaker_v2.mlmodelc`, and `wespeaker_int8.mlmodelc`
68
+ for FluidAudio's legacy online diarizer. They predate the Community-1 export
69
+ and are not covered by its license scope. They are Core ML conversions of
70
+ [`pyannote/segmentation-3.0`](https://huggingface.co/pyannote/segmentation-3.0)
71
+ (MIT) and [`pyannote/wespeaker-voxceleb-resnet34-LM`](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM)
72
+ (CC-BY-4.0); see `NOTICE.md` for revisions, parity evidence, and attribution.
73
+
74
+ ## Technical specifications
75
+
76
+ - Input: 16 kHz mono audio
77
+ - Output: speaker segments with timestamps and speaker identifiers
78
+ - Framework: Core ML converted from PyTorch
79
+ - Deployment target: iOS 17 / macOS 14 or later
80
+ - Community-1 conversion metadata: PyTorch 2.8.0, coremltools 9.0b1,
81
+ TorchScript source dialect
82
+ - Compiled MIL metadata: coremlc 3500.32.1, MIL 3500.14.1
83
+
84
+ ## Usage
85
+
86
+ See the [FluidAudio diarization documentation](https://github.com/FluidInference/FluidAudio/tree/main/Documentation/Diarization).
87
+
88
+ ## Citations
89
+
90
+ ### Speaker segmentation
91
+
92
+ ```bibtex
93
+ @inproceedings{Plaquet23,
94
+ author={Alexis Plaquet and Hervé Bredin},
95
+ title={{Powerset multi-class cross entropy loss for neural speaker diarization}},
96
+ year=2023,
97
+ booktitle={Proc. INTERSPEECH 2023},
98
+ }
99
+ ```
100
+
101
+ ### Speaker embedding
102
+
103
+ ```bibtex
104
+ @inproceedings{Wang2023,
105
+ title={Wespeaker: A research and production oriented speaker embedding learning toolkit},
106
+ author={Wang, Hongji and Liang, Chengdong and Wang, Shuai and Chen, Zhengyang and Zhang, Binbin and Xiang, Xu and Deng, Yanlei and Qian, Yanmin},
107
+ booktitle={ICASSP 2023, IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
108
+ pages={1--5},
109
+ year={2023},
110
+ organization={IEEE}
111
+ }
112
+ ```
113
+
114
+ ### Speaker clustering
115
+
116
+ ```bibtex
117
+ @article{Landini2022,
118
+ author={Landini, Federico and Profant, J{\'a}n and Diez, Mireia and Burget, Luk{\'a}{\v{s}}},
119
+ title={{Bayesian HMM clustering of x-vector sequences (VBx) in speaker diarization: theory, implementation and analysis on standard tasks}},
120
+ year={2022},
121
+ journal={Computer Speech & Language},
122
+ }
123
+ ```
Segmentation.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:64265f8e7ad41a5f68d630c15288c2499cca5892ad49e20096819cdeac004cdb
3
+ size 243
Segmentation.mlmodelc/metadata.json ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "shortDescription" : "pyannote community-1 segmentation (10 s powerset diarization, batch 1-32)",
4
+ "metadataOutputVersion" : "3.0",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "log_probs",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "version" : "pyannote-speaker-diarization-community-1",
18
+ "modelParameters" : [
19
+
20
+ ],
21
+ "author" : "Fluid Inference",
22
+ "specificationVersion" : 8,
23
+ "storagePrecision" : "Float32",
24
+ "license" : "CC-BY-4.0",
25
+ "mlProgramOperationTypeHistogram" : {
26
+ "Ios17.linear" : 3,
27
+ "Ios17.transpose" : 3,
28
+ "Ios17.conv" : 3,
29
+ "Ios17.log" : 1,
30
+ "Shape" : 1,
31
+ "Ios17.leakyRelu" : 5,
32
+ "Ios17.gather" : 1,
33
+ "Ios17.concat" : 9,
34
+ "Fill" : 1,
35
+ "Ios17.abs" : 1,
36
+ "Ios16.maxPool" : 3,
37
+ "Ios17.lstm" : 4,
38
+ "Ios16.softmax" : 1,
39
+ "Ios17.instanceNorm" : 4,
40
+ "Split" : 10,
41
+ "Ios17.squeeze" : 8
42
+ },
43
+ "computePrecision" : "Mixed (Float32, Int32)",
44
+ "stateSchema" : [
45
+
46
+ ],
47
+ "isUpdatable" : "0",
48
+ "availability" : {
49
+ "macOS" : "14.0",
50
+ "tvOS" : "17.0",
51
+ "visionOS" : "1.0",
52
+ "watchOS" : "10.0",
53
+ "iOS" : "17.0",
54
+ "macCatalyst" : "17.0"
55
+ },
56
+ "modelType" : {
57
+ "name" : "MLModelType_mlProgram"
58
+ },
59
+ "inputSchema" : [
60
+ {
61
+ "shortDescription" : "",
62
+ "dataType" : "Float32",
63
+ "hasShapeFlexibility" : "1",
64
+ "isOptional" : "0",
65
+ "shapeFlexibility" : "32 × 1 × 160000 | 1 × 1 × 160000 | 2 × 1 × 160000 | 3 × 1 × 160000 | 4 × 1 × 160000 | 5 × 1 × 160000 | 6 × 1 × 160000 | 7 × 1 × 160000 | 8 × 1 × 160000 | 9 × 1 × 160000 | 10 × 1 × 160000 | 11 × 1 × 160000 | 12 × 1 × 160000 | 13 × 1 × 160000 | 14 × 1 × 160000 | 15 × 1 × 160000 | 16 × 1 × 160000 | 17 × 1 × 160000 | 18 × 1 × 160000 | 19 × 1 × 160000 | 20 × 1 × 160000 | 21 × 1 × 160000 | 22 × 1 × 160000 | 23 × 1 × 160000 | 24 × 1 × 160000 | 25 × 1 × 160000 | 26 × 1 × 160000 | 27 × 1 × 160000 | 28 × 1 × 160000 | 29 × 1 × 160000 | 30 × 1 × 160000 | 31 × 1 × 160000",
66
+ "formattedType" : "MultiArray (Float32 32 × 1 × 160000)",
67
+ "type" : "MultiArray",
68
+ "shape" : "[32, 1, 160000]",
69
+ "name" : "audio",
70
+ "enumeratedShapes" : "[[32, 1, 160000], [1, 1, 160000], [2, 1, 160000], [3, 1, 160000], [4, 1, 160000], [5, 1, 160000], [6, 1, 160000], [7, 1, 160000], [8, 1, 160000], [9, 1, 160000], [10, 1, 160000], [11, 1, 160000], [12, 1, 160000], [13, 1, 160000], [14, 1, 160000], [15, 1, 160000], [16, 1, 160000], [17, 1, 160000], [18, 1, 160000], [19, 1, 160000], [20, 1, 160000], [21, 1, 160000], [22, 1, 160000], [23, 1, 160000], [24, 1, 160000], [25, 1, 160000], [26, 1, 160000], [27, 1, 160000], [28, 1, 160000], [29, 1, 160000], [30, 1, 160000], [31, 1, 160000]]"
71
+ }
72
+ ],
73
+ "userDefinedMetadata" : {
74
+ "com.github.apple.coremltools.conversion_date" : "2025-10-13",
75
+ "com.github.apple.coremltools.source" : "torch==2.8.0",
76
+ "com.github.apple.coremltools.version" : "9.0b1",
77
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
78
+ },
79
+ "generatedClassName" : "Segmentation",
80
+ "method" : "predict"
81
+ }
82
+ ]
Segmentation.mlmodelc/model.mil ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3500.14.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.8.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [?, 1, 160000]> audio) [FlexibleShapeInformation = tuple<tuple<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>, tuple<tensor<string, []>, dict<tensor<string, []>, dict<tensor<string, []>, tensor<int32, [?]>>>>>((("DefaultShapes", {{"audio", [32, 1, 160000]}}), ("EnumeratedShapes", {{"audio_1_1_10_1_160000_", {{"audio", [10, 1, 160000]}}}, {"audio_1_1_11_1_160000_", {{"audio", [11, 1, 160000]}}}, {"audio_1_1_12_1_160000_", {{"audio", [12, 1, 160000]}}}, {"audio_1_1_13_1_160000_", {{"audio", [13, 1, 160000]}}}, {"audio_1_1_14_1_160000_", {{"audio", [14, 1, 160000]}}}, {"audio_1_1_15_1_160000_", {{"audio", [15, 1, 160000]}}}, {"audio_1_1_16_1_160000_", {{"audio", [16, 1, 160000]}}}, {"audio_1_1_17_1_160000_", {{"audio", [17, 1, 160000]}}}, {"audio_1_1_18_1_160000_", {{"audio", [18, 1, 160000]}}}, {"audio_1_1_19_1_160000_", {{"audio", [19, 1, 160000]}}}, {"audio_1_1_1_1_160000_", {{"audio", [1, 1, 160000]}}}, {"audio_1_1_20_1_160000_", {{"audio", [20, 1, 160000]}}}, {"audio_1_1_21_1_160000_", {{"audio", [21, 1, 160000]}}}, {"audio_1_1_22_1_160000_", {{"audio", [22, 1, 160000]}}}, {"audio_1_1_23_1_160000_", {{"audio", [23, 1, 160000]}}}, {"audio_1_1_24_1_160000_", {{"audio", [24, 1, 160000]}}}, {"audio_1_1_25_1_160000_", {{"audio", [25, 1, 160000]}}}, {"audio_1_1_26_1_160000_", {{"audio", [26, 1, 160000]}}}, {"audio_1_1_27_1_160000_", {{"audio", [27, 1, 160000]}}}, {"audio_1_1_28_1_160000_", {{"audio", [28, 1, 160000]}}}, {"audio_1_1_29_1_160000_", {{"audio", [29, 1, 160000]}}}, {"audio_1_1_2_1_160000_", {{"audio", [2, 1, 160000]}}}, {"audio_1_1_30_1_160000_", {{"audio", [30, 1, 160000]}}}, {"audio_1_1_31_1_160000_", {{"audio", [31, 1, 160000]}}}, {"audio_1_1_32_1_160000_", {{"audio", [32, 1, 160000]}}}, {"audio_1_1_3_1_160000_", {{"audio", [3, 1, 160000]}}}, {"audio_1_1_4_1_160000_", {{"audio", [4, 1, 160000]}}}, {"audio_1_1_5_1_160000_", {{"audio", [5, 1, 160000]}}}, {"audio_1_1_6_1_160000_", {{"audio", [6, 1, 160000]}}}, {"audio_1_1_7_1_160000_", {{"audio", [7, 1, 160000]}}}, {"audio_1_1_8_1_160000_", {{"audio", [8, 1, 160000]}}}, {"audio_1_1_9_1_160000_", {{"audio", [9, 1, 160000]}}}})))] {
5
+ tensor<fp32, [1]> sincnet_wav_norm1d_bias = const()[name = tensor<string, []>("sincnet_wav_norm1d_bias"), val = tensor<fp32, [1]>([0x1.73505ep-5])];
6
+ tensor<fp32, [1]> sincnet_wav_norm1d_weight = const()[name = tensor<string, []>("sincnet_wav_norm1d_weight"), val = tensor<fp32, [1]>([0x1.43f862p-7])];
7
+ tensor<fp32, [80]> sincnet_norm1d_0_bias = const()[name = tensor<string, []>("sincnet_norm1d_0_bias"), val = tensor<fp32, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
8
+ tensor<fp32, [80]> sincnet_norm1d_0_weight = const()[name = tensor<string, []>("sincnet_norm1d_0_weight"), val = tensor<fp32, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(448)))];
9
+ tensor<fp32, [60]> sincnet_conv1d_1_bias = const()[name = tensor<string, []>("sincnet_conv1d_1_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(832)))];
10
+ tensor<fp32, [60, 80, 5]> sincnet_conv1d_1_weight = const()[name = tensor<string, []>("sincnet_conv1d_1_weight"), val = tensor<fp32, [60, 80, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1152)))];
11
+ tensor<fp32, [60]> sincnet_norm1d_1_bias = const()[name = tensor<string, []>("sincnet_norm1d_1_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97216)))];
12
+ tensor<fp32, [60]> sincnet_norm1d_1_weight = const()[name = tensor<string, []>("sincnet_norm1d_1_weight"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97536)))];
13
+ tensor<fp32, [60]> sincnet_conv1d_2_bias = const()[name = tensor<string, []>("sincnet_conv1d_2_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(97856)))];
14
+ tensor<fp32, [60, 60, 5]> sincnet_conv1d_2_weight = const()[name = tensor<string, []>("sincnet_conv1d_2_weight"), val = tensor<fp32, [60, 60, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(98176)))];
15
+ tensor<fp32, [60]> sincnet_norm1d_2_bias = const()[name = tensor<string, []>("sincnet_norm1d_2_bias"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170240)))];
16
+ tensor<fp32, [60]> sincnet_norm1d_2_weight = const()[name = tensor<string, []>("sincnet_norm1d_2_weight"), val = tensor<fp32, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170560)))];
17
+ tensor<fp32, [128]> linear_0_bias = const()[name = tensor<string, []>("linear_0_bias"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(170880)))];
18
+ tensor<fp32, [128, 256]> linear_0_weight = const()[name = tensor<string, []>("linear_0_weight"), val = tensor<fp32, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(171456)))];
19
+ tensor<fp32, [128]> linear_1_bias = const()[name = tensor<string, []>("linear_1_bias"), val = tensor<fp32, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(302592)))];
20
+ tensor<fp32, [128, 128]> linear_1_weight = const()[name = tensor<string, []>("linear_1_weight"), val = tensor<fp32, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(303168)))];
21
+ tensor<fp32, [7]> classifier_bias = const()[name = tensor<string, []>("classifier_bias"), val = tensor<fp32, [7]>([-0x1.00e888p+0, 0x1.67cb52p-2, 0x1.3d87fp-1, 0x1.c8aa8p-2, -0x1.445f5ep-2, -0x1.591274p-1, -0x1.8fb70ep-2])];
22
+ tensor<fp32, [7, 128]> classifier_weight = const()[name = tensor<string, []>("classifier_weight"), val = tensor<fp32, [7, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(368768)))];
23
+ tensor<fp32, []> var_9 = const()[name = tensor<string, []>("op_9"), val = tensor<fp32, []>(0x1.47ae14p-7)];
24
+ tensor<fp32, []> var_24 = const()[name = tensor<string, []>("op_24"), val = tensor<fp32, []>(0x1.4f8b58p-17)];
25
+ tensor<fp32, [?, 1, 160000]> waveform = instance_norm(beta = sincnet_wav_norm1d_bias, epsilon = var_24, gamma = sincnet_wav_norm1d_weight, x = audio)[name = tensor<string, []>("waveform")];
26
+ tensor<fp32, [80, 1, 251]> filters = const()[name = tensor<string, []>("filters"), val = tensor<fp32, [80, 1, 251]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(372416)))];
27
+ tensor<string, []> outputs_pad_type_0 = const()[name = tensor<string, []>("outputs_pad_type_0"), val = tensor<string, []>("valid")];
28
+ tensor<int32, [1]> outputs_strides_0 = const()[name = tensor<string, []>("outputs_strides_0"), val = tensor<int32, [1]>([10])];
29
+ tensor<int32, [2]> outputs_pad_0 = const()[name = tensor<string, []>("outputs_pad_0"), val = tensor<int32, [2]>([0, 0])];
30
+ tensor<int32, [1]> outputs_dilations_0 = const()[name = tensor<string, []>("outputs_dilations_0"), val = tensor<int32, [1]>([1])];
31
+ tensor<int32, []> outputs_groups_0 = const()[name = tensor<string, []>("outputs_groups_0"), val = tensor<int32, []>(1)];
32
+ tensor<fp32, [?, 80, 15975]> outputs = conv(dilations = outputs_dilations_0, groups = outputs_groups_0, pad = outputs_pad_0, pad_type = outputs_pad_type_0, strides = outputs_strides_0, weight = filters, x = waveform)[name = tensor<string, []>("outputs")];
33
+ tensor<fp32, [?, 80, 15975]> input_1 = abs(x = outputs)[name = tensor<string, []>("input_1")];
34
+ tensor<int32, [1]> var_119 = const()[name = tensor<string, []>("op_119"), val = tensor<int32, [1]>([3])];
35
+ tensor<int32, [1]> var_120 = const()[name = tensor<string, []>("op_120"), val = tensor<int32, [1]>([3])];
36
+ tensor<string, []> input_3_pad_type_0 = const()[name = tensor<string, []>("input_3_pad_type_0"), val = tensor<string, []>("custom")];
37
+ tensor<int32, [2]> input_3_pad_0 = const()[name = tensor<string, []>("input_3_pad_0"), val = tensor<int32, [2]>([0, 0])];
38
+ tensor<bool, []> input_3_ceil_mode_0 = const()[name = tensor<string, []>("input_3_ceil_mode_0"), val = tensor<bool, []>(false)];
39
+ tensor<fp32, [?, 80, 5325]> input_3 = max_pool(ceil_mode = input_3_ceil_mode_0, kernel_sizes = var_119, pad = input_3_pad_0, pad_type = input_3_pad_type_0, strides = var_120, x = input_1)[name = tensor<string, []>("input_3")];
40
+ tensor<fp32, [?, 80, 5325]> input_5 = instance_norm(beta = sincnet_norm1d_0_bias, epsilon = var_24, gamma = sincnet_norm1d_0_weight, x = input_3)[name = tensor<string, []>("input_5")];
41
+ tensor<fp32, [?, 80, 5325]> input_7 = leaky_relu(alpha = var_9, x = input_5)[name = tensor<string, []>("input_7")];
42
+ tensor<string, []> input_9_pad_type_0 = const()[name = tensor<string, []>("input_9_pad_type_0"), val = tensor<string, []>("valid")];
43
+ tensor<int32, [1]> input_9_strides_0 = const()[name = tensor<string, []>("input_9_strides_0"), val = tensor<int32, [1]>([1])];
44
+ tensor<int32, [2]> input_9_pad_0 = const()[name = tensor<string, []>("input_9_pad_0"), val = tensor<int32, [2]>([0, 0])];
45
+ tensor<int32, [1]> input_9_dilations_0 = const()[name = tensor<string, []>("input_9_dilations_0"), val = tensor<int32, [1]>([1])];
46
+ tensor<int32, []> input_9_groups_0 = const()[name = tensor<string, []>("input_9_groups_0"), val = tensor<int32, []>(1)];
47
+ tensor<fp32, [?, 60, 5321]> input_9 = conv(bias = sincnet_conv1d_1_bias, dilations = input_9_dilations_0, groups = input_9_groups_0, pad = input_9_pad_0, pad_type = input_9_pad_type_0, strides = input_9_strides_0, weight = sincnet_conv1d_1_weight, x = input_7)[name = tensor<string, []>("input_9")];
48
+ tensor<int32, [1]> var_135 = const()[name = tensor<string, []>("op_135"), val = tensor<int32, [1]>([3])];
49
+ tensor<int32, [1]> var_136 = const()[name = tensor<string, []>("op_136"), val = tensor<int32, [1]>([3])];
50
+ tensor<string, []> input_11_pad_type_0 = const()[name = tensor<string, []>("input_11_pad_type_0"), val = tensor<string, []>("custom")];
51
+ tensor<int32, [2]> input_11_pad_0 = const()[name = tensor<string, []>("input_11_pad_0"), val = tensor<int32, [2]>([0, 0])];
52
+ tensor<bool, []> input_11_ceil_mode_0 = const()[name = tensor<string, []>("input_11_ceil_mode_0"), val = tensor<bool, []>(false)];
53
+ tensor<fp32, [?, 60, 1773]> input_11 = max_pool(ceil_mode = input_11_ceil_mode_0, kernel_sizes = var_135, pad = input_11_pad_0, pad_type = input_11_pad_type_0, strides = var_136, x = input_9)[name = tensor<string, []>("input_11")];
54
+ tensor<fp32, [?, 60, 1773]> input_13 = instance_norm(beta = sincnet_norm1d_1_bias, epsilon = var_24, gamma = sincnet_norm1d_1_weight, x = input_11)[name = tensor<string, []>("input_13")];
55
+ tensor<fp32, [?, 60, 1773]> input_15 = leaky_relu(alpha = var_9, x = input_13)[name = tensor<string, []>("input_15")];
56
+ tensor<string, []> input_17_pad_type_0 = const()[name = tensor<string, []>("input_17_pad_type_0"), val = tensor<string, []>("valid")];
57
+ tensor<int32, [1]> input_17_strides_0 = const()[name = tensor<string, []>("input_17_strides_0"), val = tensor<int32, [1]>([1])];
58
+ tensor<int32, [2]> input_17_pad_0 = const()[name = tensor<string, []>("input_17_pad_0"), val = tensor<int32, [2]>([0, 0])];
59
+ tensor<int32, [1]> input_17_dilations_0 = const()[name = tensor<string, []>("input_17_dilations_0"), val = tensor<int32, [1]>([1])];
60
+ tensor<int32, []> input_17_groups_0 = const()[name = tensor<string, []>("input_17_groups_0"), val = tensor<int32, []>(1)];
61
+ tensor<fp32, [?, 60, 1769]> input_17 = conv(bias = sincnet_conv1d_2_bias, dilations = input_17_dilations_0, groups = input_17_groups_0, pad = input_17_pad_0, pad_type = input_17_pad_type_0, strides = input_17_strides_0, weight = sincnet_conv1d_2_weight, x = input_15)[name = tensor<string, []>("input_17")];
62
+ tensor<int32, [1]> var_151 = const()[name = tensor<string, []>("op_151"), val = tensor<int32, [1]>([3])];
63
+ tensor<int32, [1]> var_152 = const()[name = tensor<string, []>("op_152"), val = tensor<int32, [1]>([3])];
64
+ tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
65
+ tensor<int32, [2]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [2]>([0, 0])];
66
+ tensor<bool, []> input_19_ceil_mode_0 = const()[name = tensor<string, []>("input_19_ceil_mode_0"), val = tensor<bool, []>(false)];
67
+ tensor<fp32, [?, 60, 589]> input_19 = max_pool(ceil_mode = input_19_ceil_mode_0, kernel_sizes = var_151, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = var_152, x = input_17)[name = tensor<string, []>("input_19")];
68
+ tensor<fp32, [?, 60, 589]> input_21 = instance_norm(beta = sincnet_norm1d_2_bias, epsilon = var_24, gamma = sincnet_norm1d_2_weight, x = input_19)[name = tensor<string, []>("input_21")];
69
+ tensor<fp32, [?, 60, 589]> x = leaky_relu(alpha = var_9, x = input_21)[name = tensor<string, []>("x")];
70
+ tensor<int32, [3]> var_163 = const()[name = tensor<string, []>("op_163"), val = tensor<int32, [3]>([0, 2, 1])];
71
+ tensor<int32, []> var_172 = const()[name = tensor<string, []>("op_172"), val = tensor<int32, []>(128)];
72
+ tensor<int32, []> var_173 = const()[name = tensor<string, []>("op_173"), val = tensor<int32, []>(8)];
73
+ tensor<fp32, [?, 589, 60]> input_23 = transpose(perm = var_163, x = x)[name = tensor<string, []>("transpose_6")];
74
+ tensor<int32, [3]> var_207_shape = shape(x = input_23)[name = tensor<string, []>("op_207_shape")];
75
+ tensor<int32, []> gather_0_batch_dims_0 = const()[name = tensor<string, []>("gather_0_batch_dims_0"), val = tensor<int32, []>(0)];
76
+ tensor<bool, []> gather_0_validate_indices_0 = const()[name = tensor<string, []>("gather_0_validate_indices_0"), val = tensor<bool, []>(false)];
77
+ tensor<int32, []> select_0 = const()[name = tensor<string, []>("select_0"), val = tensor<int32, []>(0)];
78
+ tensor<int32, []> gather_0_axis_1 = const()[name = tensor<string, []>("gather_0_axis_1"), val = tensor<int32, []>(0)];
79
+ tensor<int32, []> gather_0 = gather(axis = gather_0_axis_1, batch_dims = gather_0_batch_dims_0, indices = select_0, validate_indices = gather_0_validate_indices_0, x = var_207_shape)[name = tensor<string, []>("gather_0")];
80
+ tensor<int32, []> concat_0_axis_0 = const()[name = tensor<string, []>("concat_0_axis_0"), val = tensor<int32, []>(0)];
81
+ tensor<bool, []> concat_0_interleave_0 = const()[name = tensor<string, []>("concat_0_interleave_0"), val = tensor<bool, []>(false)];
82
+ tensor<int32, [3]> concat_0 = concat(axis = concat_0_axis_0, interleave = concat_0_interleave_0, values = (var_173, gather_0, var_172))[name = tensor<string, []>("concat_0")];
83
+ tensor<fp32, []> hx_1_value_0 = const()[name = tensor<string, []>("hx_1_value_0"), val = tensor<fp32, []>(0x0p+0)];
84
+ tensor<fp32, [8, ?, 128]> hx_1 = fill(shape = concat_0, value = hx_1_value_0)[name = tensor<string, []>("hx_1")];
85
+ tensor<int32, [3]> input_23_batch_first_transpose_perm_0 = const()[name = tensor<string, []>("input_23_batch_first_transpose_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
86
+ tensor<int32, []> split_0_num_splits_0 = const()[name = tensor<string, []>("split_0_num_splits_0"), val = tensor<int32, []>(4)];
87
+ tensor<int32, []> split_0_axis_0 = const()[name = tensor<string, []>("split_0_axis_0"), val = tensor<int32, []>(0)];
88
+ tensor<fp32, [2, ?, 128]> split_0_0, tensor<fp32, [2, ?, 128]> split_0_1, tensor<fp32, [2, ?, 128]> split_0_2, tensor<fp32, [2, ?, 128]> split_0_3 = split(axis = split_0_axis_0, num_splits = split_0_num_splits_0, x = hx_1)[name = tensor<string, []>("split_0")];
89
+ tensor<int32, []> split_1_num_splits_0 = const()[name = tensor<string, []>("split_1_num_splits_0"), val = tensor<int32, []>(4)];
90
+ tensor<int32, []> split_1_axis_0 = const()[name = tensor<string, []>("split_1_axis_0"), val = tensor<int32, []>(0)];
91
+ tensor<fp32, [2, ?, 128]> split_1_0, tensor<fp32, [2, ?, 128]> split_1_1, tensor<fp32, [2, ?, 128]> split_1_2, tensor<fp32, [2, ?, 128]> split_1_3 = split(axis = split_1_axis_0, num_splits = split_1_num_splits_0, x = hx_1)[name = tensor<string, []>("split_1")];
92
+ tensor<fp32, [512]> add_0 = const()[name = tensor<string, []>("add_0"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(452800)))];
93
+ tensor<fp32, [512]> add_1 = const()[name = tensor<string, []>("add_1"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(454912)))];
94
+ tensor<fp32, [512, 60]> concat_6 = const()[name = tensor<string, []>("concat_6"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(457024)))];
95
+ tensor<fp32, [512, 128]> concat_7 = const()[name = tensor<string, []>("concat_7"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(579968)))];
96
+ tensor<fp32, [512, 60]> concat_8 = const()[name = tensor<string, []>("concat_8"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(842176)))];
97
+ tensor<fp32, [512, 128]> concat_9 = const()[name = tensor<string, []>("concat_9"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(965120)))];
98
+ tensor<int32, [2]> split_10_split_sizes_0 = const()[name = tensor<string, []>("split_10_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
99
+ tensor<int32, []> split_10_axis_0 = const()[name = tensor<string, []>("split_10_axis_0"), val = tensor<int32, []>(0)];
100
+ tensor<fp32, [1, ?, 128]> split_10_0, tensor<fp32, [1, ?, 128]> split_10_1 = split(axis = split_10_axis_0, split_sizes = split_10_split_sizes_0, x = split_0_0)[name = tensor<string, []>("split_10")];
101
+ tensor<int32, []> concat_10_axis_0 = const()[name = tensor<string, []>("concat_10_axis_0"), val = tensor<int32, []>(2)];
102
+ tensor<bool, []> concat_10_interleave_0 = const()[name = tensor<string, []>("concat_10_interleave_0"), val = tensor<bool, []>(false)];
103
+ tensor<fp32, [1, ?, 256]> concat_10 = concat(axis = concat_10_axis_0, interleave = concat_10_interleave_0, values = (split_10_0, split_10_1))[name = tensor<string, []>("concat_10")];
104
+ tensor<int32, [1]> input_25_lstm_layer_0_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
105
+ tensor<fp32, [?, 256]> input_25_lstm_layer_0_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_0_lstm_h0_reshaped_axes_0, x = concat_10)[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped")];
106
+ tensor<int32, [2]> split_11_split_sizes_0 = const()[name = tensor<string, []>("split_11_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
107
+ tensor<int32, []> split_11_axis_0 = const()[name = tensor<string, []>("split_11_axis_0"), val = tensor<int32, []>(0)];
108
+ tensor<fp32, [1, ?, 128]> split_11_0, tensor<fp32, [1, ?, 128]> split_11_1 = split(axis = split_11_axis_0, split_sizes = split_11_split_sizes_0, x = split_1_0)[name = tensor<string, []>("split_11")];
109
+ tensor<int32, []> concat_11_axis_0 = const()[name = tensor<string, []>("concat_11_axis_0"), val = tensor<int32, []>(2)];
110
+ tensor<bool, []> concat_11_interleave_0 = const()[name = tensor<string, []>("concat_11_interleave_0"), val = tensor<bool, []>(false)];
111
+ tensor<fp32, [1, ?, 256]> concat_11 = concat(axis = concat_11_axis_0, interleave = concat_11_interleave_0, values = (split_11_0, split_11_1))[name = tensor<string, []>("concat_11")];
112
+ tensor<int32, [1]> input_25_lstm_layer_0_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
113
+ tensor<fp32, [?, 256]> input_25_lstm_layer_0_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_0_lstm_c0_reshaped_axes_0, x = concat_11)[name = tensor<string, []>("input_25_lstm_layer_0_lstm_c0_reshaped")];
114
+ tensor<string, []> input_25_lstm_layer_0_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_direction_0"), val = tensor<string, []>("bidirectional")];
115
+ tensor<bool, []> input_25_lstm_layer_0_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_output_sequence_0"), val = tensor<bool, []>(true)];
116
+ tensor<string, []> input_25_lstm_layer_0_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
117
+ tensor<string, []> input_25_lstm_layer_0_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_cell_activation_0"), val = tensor<string, []>("tanh")];
118
+ tensor<string, []> input_25_lstm_layer_0_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_activation_0"), val = tensor<string, []>("tanh")];
119
+ tensor<fp32, [589, ?, 60]> input_23_batch_first_transpose = transpose(perm = input_23_batch_first_transpose_perm_0, x = input_23)[name = tensor<string, []>("transpose_5")];
120
+ tensor<fp32, [589, ?, 256]> input_25_lstm_layer_0_0, tensor<fp32, [?, 256]> input_25_lstm_layer_0_1, tensor<fp32, [?, 256]> input_25_lstm_layer_0_2 = lstm(activation = input_25_lstm_layer_0_activation_0, bias = add_0, bias_back = add_1, cell_activation = input_25_lstm_layer_0_cell_activation_0, direction = input_25_lstm_layer_0_direction_0, initial_c = input_25_lstm_layer_0_lstm_c0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_0_output_sequence_0, recurrent_activation = input_25_lstm_layer_0_recurrent_activation_0, weight_hh = concat_7, weight_hh_back = concat_9, weight_ih = concat_6, weight_ih_back = concat_8, x = input_23_batch_first_transpose)[name = tensor<string, []>("input_25_lstm_layer_0")];
121
+ tensor<fp32, [512]> add_2 = const()[name = tensor<string, []>("add_2"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1227328)))];
122
+ tensor<fp32, [512]> add_3 = const()[name = tensor<string, []>("add_3"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1229440)))];
123
+ tensor<fp32, [512, 256]> concat_16 = const()[name = tensor<string, []>("concat_16"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1231552)))];
124
+ tensor<fp32, [512, 128]> concat_17 = const()[name = tensor<string, []>("concat_17"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1755904)))];
125
+ tensor<fp32, [512, 256]> concat_18 = const()[name = tensor<string, []>("concat_18"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2018112)))];
126
+ tensor<fp32, [512, 128]> concat_19 = const()[name = tensor<string, []>("concat_19"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2542464)))];
127
+ tensor<int32, [2]> split_20_split_sizes_0 = const()[name = tensor<string, []>("split_20_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
128
+ tensor<int32, []> split_20_axis_0 = const()[name = tensor<string, []>("split_20_axis_0"), val = tensor<int32, []>(0)];
129
+ tensor<fp32, [1, ?, 128]> split_20_0, tensor<fp32, [1, ?, 128]> split_20_1 = split(axis = split_20_axis_0, split_sizes = split_20_split_sizes_0, x = split_0_1)[name = tensor<string, []>("split_20")];
130
+ tensor<int32, []> concat_20_axis_0 = const()[name = tensor<string, []>("concat_20_axis_0"), val = tensor<int32, []>(2)];
131
+ tensor<bool, []> concat_20_interleave_0 = const()[name = tensor<string, []>("concat_20_interleave_0"), val = tensor<bool, []>(false)];
132
+ tensor<fp32, [1, ?, 256]> concat_20 = concat(axis = concat_20_axis_0, interleave = concat_20_interleave_0, values = (split_20_0, split_20_1))[name = tensor<string, []>("concat_20")];
133
+ tensor<int32, [1]> input_25_lstm_layer_1_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
134
+ tensor<fp32, [?, 256]> input_25_lstm_layer_1_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_1_lstm_h0_reshaped_axes_0, x = concat_20)[name = tensor<string, []>("input_25_lstm_layer_1_lstm_h0_reshaped")];
135
+ tensor<int32, [2]> split_21_split_sizes_0 = const()[name = tensor<string, []>("split_21_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
136
+ tensor<int32, []> split_21_axis_0 = const()[name = tensor<string, []>("split_21_axis_0"), val = tensor<int32, []>(0)];
137
+ tensor<fp32, [1, ?, 128]> split_21_0, tensor<fp32, [1, ?, 128]> split_21_1 = split(axis = split_21_axis_0, split_sizes = split_21_split_sizes_0, x = split_1_1)[name = tensor<string, []>("split_21")];
138
+ tensor<int32, []> concat_21_axis_0 = const()[name = tensor<string, []>("concat_21_axis_0"), val = tensor<int32, []>(2)];
139
+ tensor<bool, []> concat_21_interleave_0 = const()[name = tensor<string, []>("concat_21_interleave_0"), val = tensor<bool, []>(false)];
140
+ tensor<fp32, [1, ?, 256]> concat_21 = concat(axis = concat_21_axis_0, interleave = concat_21_interleave_0, values = (split_21_0, split_21_1))[name = tensor<string, []>("concat_21")];
141
+ tensor<int32, [1]> input_25_lstm_layer_1_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
142
+ tensor<fp32, [?, 256]> input_25_lstm_layer_1_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_1_lstm_c0_reshaped_axes_0, x = concat_21)[name = tensor<string, []>("input_25_lstm_layer_1_lstm_c0_reshaped")];
143
+ tensor<string, []> input_25_lstm_layer_1_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_direction_0"), val = tensor<string, []>("bidirectional")];
144
+ tensor<bool, []> input_25_lstm_layer_1_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_output_sequence_0"), val = tensor<bool, []>(true)];
145
+ tensor<string, []> input_25_lstm_layer_1_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
146
+ tensor<string, []> input_25_lstm_layer_1_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_cell_activation_0"), val = tensor<string, []>("tanh")];
147
+ tensor<string, []> input_25_lstm_layer_1_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_activation_0"), val = tensor<string, []>("tanh")];
148
+ tensor<fp32, [589, ?, 256]> input_25_lstm_layer_1_0, tensor<fp32, [?, 256]> input_25_lstm_layer_1_1, tensor<fp32, [?, 256]> input_25_lstm_layer_1_2 = lstm(activation = input_25_lstm_layer_1_activation_0, bias = add_2, bias_back = add_3, cell_activation = input_25_lstm_layer_1_cell_activation_0, direction = input_25_lstm_layer_1_direction_0, initial_c = input_25_lstm_layer_1_lstm_c0_reshaped, initial_h = input_25_lstm_layer_1_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_1_output_sequence_0, recurrent_activation = input_25_lstm_layer_1_recurrent_activation_0, weight_hh = concat_17, weight_hh_back = concat_19, weight_ih = concat_16, weight_ih_back = concat_18, x = input_25_lstm_layer_0_0)[name = tensor<string, []>("input_25_lstm_layer_1")];
149
+ tensor<fp32, [512]> add_4 = const()[name = tensor<string, []>("add_4"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2804672)))];
150
+ tensor<fp32, [512]> add_5 = const()[name = tensor<string, []>("add_5"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2806784)))];
151
+ tensor<fp32, [512, 256]> concat_26 = const()[name = tensor<string, []>("concat_26"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2808896)))];
152
+ tensor<fp32, [512, 128]> concat_27 = const()[name = tensor<string, []>("concat_27"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3333248)))];
153
+ tensor<fp32, [512, 256]> concat_28 = const()[name = tensor<string, []>("concat_28"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3595456)))];
154
+ tensor<fp32, [512, 128]> concat_29 = const()[name = tensor<string, []>("concat_29"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4119808)))];
155
+ tensor<int32, [2]> split_30_split_sizes_0 = const()[name = tensor<string, []>("split_30_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
156
+ tensor<int32, []> split_30_axis_0 = const()[name = tensor<string, []>("split_30_axis_0"), val = tensor<int32, []>(0)];
157
+ tensor<fp32, [1, ?, 128]> split_30_0, tensor<fp32, [1, ?, 128]> split_30_1 = split(axis = split_30_axis_0, split_sizes = split_30_split_sizes_0, x = split_0_2)[name = tensor<string, []>("split_30")];
158
+ tensor<int32, []> concat_30_axis_0 = const()[name = tensor<string, []>("concat_30_axis_0"), val = tensor<int32, []>(2)];
159
+ tensor<bool, []> concat_30_interleave_0 = const()[name = tensor<string, []>("concat_30_interleave_0"), val = tensor<bool, []>(false)];
160
+ tensor<fp32, [1, ?, 256]> concat_30 = concat(axis = concat_30_axis_0, interleave = concat_30_interleave_0, values = (split_30_0, split_30_1))[name = tensor<string, []>("concat_30")];
161
+ tensor<int32, [1]> input_25_lstm_layer_2_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
162
+ tensor<fp32, [?, 256]> input_25_lstm_layer_2_lstm_h0_reshaped = squeeze(axes = input_25_lstm_layer_2_lstm_h0_reshaped_axes_0, x = concat_30)[name = tensor<string, []>("input_25_lstm_layer_2_lstm_h0_reshaped")];
163
+ tensor<int32, [2]> split_31_split_sizes_0 = const()[name = tensor<string, []>("split_31_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
164
+ tensor<int32, []> split_31_axis_0 = const()[name = tensor<string, []>("split_31_axis_0"), val = tensor<int32, []>(0)];
165
+ tensor<fp32, [1, ?, 128]> split_31_0, tensor<fp32, [1, ?, 128]> split_31_1 = split(axis = split_31_axis_0, split_sizes = split_31_split_sizes_0, x = split_1_2)[name = tensor<string, []>("split_31")];
166
+ tensor<int32, []> concat_31_axis_0 = const()[name = tensor<string, []>("concat_31_axis_0"), val = tensor<int32, []>(2)];
167
+ tensor<bool, []> concat_31_interleave_0 = const()[name = tensor<string, []>("concat_31_interleave_0"), val = tensor<bool, []>(false)];
168
+ tensor<fp32, [1, ?, 256]> concat_31 = concat(axis = concat_31_axis_0, interleave = concat_31_interleave_0, values = (split_31_0, split_31_1))[name = tensor<string, []>("concat_31")];
169
+ tensor<int32, [1]> input_25_lstm_layer_2_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
170
+ tensor<fp32, [?, 256]> input_25_lstm_layer_2_lstm_c0_reshaped = squeeze(axes = input_25_lstm_layer_2_lstm_c0_reshaped_axes_0, x = concat_31)[name = tensor<string, []>("input_25_lstm_layer_2_lstm_c0_reshaped")];
171
+ tensor<string, []> input_25_lstm_layer_2_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_direction_0"), val = tensor<string, []>("bidirectional")];
172
+ tensor<bool, []> input_25_lstm_layer_2_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_output_sequence_0"), val = tensor<bool, []>(true)];
173
+ tensor<string, []> input_25_lstm_layer_2_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
174
+ tensor<string, []> input_25_lstm_layer_2_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_cell_activation_0"), val = tensor<string, []>("tanh")];
175
+ tensor<string, []> input_25_lstm_layer_2_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_activation_0"), val = tensor<string, []>("tanh")];
176
+ tensor<fp32, [589, ?, 256]> input_25_lstm_layer_2_0, tensor<fp32, [?, 256]> input_25_lstm_layer_2_1, tensor<fp32, [?, 256]> input_25_lstm_layer_2_2 = lstm(activation = input_25_lstm_layer_2_activation_0, bias = add_4, bias_back = add_5, cell_activation = input_25_lstm_layer_2_cell_activation_0, direction = input_25_lstm_layer_2_direction_0, initial_c = input_25_lstm_layer_2_lstm_c0_reshaped, initial_h = input_25_lstm_layer_2_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_2_output_sequence_0, recurrent_activation = input_25_lstm_layer_2_recurrent_activation_0, weight_hh = concat_27, weight_hh_back = concat_29, weight_ih = concat_26, weight_ih_back = concat_28, x = input_25_lstm_layer_1_0)[name = tensor<string, []>("input_25_lstm_layer_2")];
177
+ tensor<fp32, [512]> add_6 = const()[name = tensor<string, []>("add_6"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4382016)))];
178
+ tensor<fp32, [512]> add_7 = const()[name = tensor<string, []>("add_7"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4384128)))];
179
+ tensor<fp32, [512, 256]> concat_36 = const()[name = tensor<string, []>("concat_36"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4386240)))];
180
+ tensor<fp32, [512, 128]> concat_37 = const()[name = tensor<string, []>("concat_37"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4910592)))];
181
+ tensor<fp32, [512, 256]> concat_38 = const()[name = tensor<string, []>("concat_38"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5172800)))];
182
+ tensor<fp32, [512, 128]> concat_39 = const()[name = tensor<string, []>("concat_39"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5697152)))];
183
+ tensor<int32, [2]> split_40_split_sizes_0 = const()[name = tensor<string, []>("split_40_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
184
+ tensor<int32, []> split_40_axis_0 = const()[name = tensor<string, []>("split_40_axis_0"), val = tensor<int32, []>(0)];
185
+ tensor<fp32, [1, ?, 128]> split_40_0, tensor<fp32, [1, ?, 128]> split_40_1 = split(axis = split_40_axis_0, split_sizes = split_40_split_sizes_0, x = split_0_3)[name = tensor<string, []>("split_40")];
186
+ tensor<int32, []> concat_40_axis_0 = const()[name = tensor<string, []>("concat_40_axis_0"), val = tensor<int32, []>(2)];
187
+ tensor<bool, []> concat_40_interleave_0 = const()[name = tensor<string, []>("concat_40_interleave_0"), val = tensor<bool, []>(false)];
188
+ tensor<fp32, [1, ?, 256]> concat_40 = concat(axis = concat_40_axis_0, interleave = concat_40_interleave_0, values = (split_40_0, split_40_1))[name = tensor<string, []>("concat_40")];
189
+ tensor<int32, [1]> input_25_batch_first_lstm_h0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_batch_first_lstm_h0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
190
+ tensor<fp32, [?, 256]> input_25_batch_first_lstm_h0_reshaped = squeeze(axes = input_25_batch_first_lstm_h0_reshaped_axes_0, x = concat_40)[name = tensor<string, []>("input_25_batch_first_lstm_h0_reshaped")];
191
+ tensor<int32, [2]> split_41_split_sizes_0 = const()[name = tensor<string, []>("split_41_split_sizes_0"), val = tensor<int32, [2]>([1, 1])];
192
+ tensor<int32, []> split_41_axis_0 = const()[name = tensor<string, []>("split_41_axis_0"), val = tensor<int32, []>(0)];
193
+ tensor<fp32, [1, ?, 128]> split_41_0, tensor<fp32, [1, ?, 128]> split_41_1 = split(axis = split_41_axis_0, split_sizes = split_41_split_sizes_0, x = split_1_3)[name = tensor<string, []>("split_41")];
194
+ tensor<int32, []> concat_41_axis_0 = const()[name = tensor<string, []>("concat_41_axis_0"), val = tensor<int32, []>(2)];
195
+ tensor<bool, []> concat_41_interleave_0 = const()[name = tensor<string, []>("concat_41_interleave_0"), val = tensor<bool, []>(false)];
196
+ tensor<fp32, [1, ?, 256]> concat_41 = concat(axis = concat_41_axis_0, interleave = concat_41_interleave_0, values = (split_41_0, split_41_1))[name = tensor<string, []>("concat_41")];
197
+ tensor<int32, [1]> input_25_batch_first_lstm_c0_reshaped_axes_0 = const()[name = tensor<string, []>("input_25_batch_first_lstm_c0_reshaped_axes_0"), val = tensor<int32, [1]>([0])];
198
+ tensor<fp32, [?, 256]> input_25_batch_first_lstm_c0_reshaped = squeeze(axes = input_25_batch_first_lstm_c0_reshaped_axes_0, x = concat_41)[name = tensor<string, []>("input_25_batch_first_lstm_c0_reshaped")];
199
+ tensor<string, []> input_25_batch_first_direction_0 = const()[name = tensor<string, []>("input_25_batch_first_direction_0"), val = tensor<string, []>("bidirectional")];
200
+ tensor<bool, []> input_25_batch_first_output_sequence_0 = const()[name = tensor<string, []>("input_25_batch_first_output_sequence_0"), val = tensor<bool, []>(true)];
201
+ tensor<string, []> input_25_batch_first_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
202
+ tensor<string, []> input_25_batch_first_cell_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_cell_activation_0"), val = tensor<string, []>("tanh")];
203
+ tensor<string, []> input_25_batch_first_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_activation_0"), val = tensor<string, []>("tanh")];
204
+ tensor<fp32, [589, ?, 256]> input_25_batch_first_0, tensor<fp32, [?, 256]> input_25_batch_first_1, tensor<fp32, [?, 256]> input_25_batch_first_2 = lstm(activation = input_25_batch_first_activation_0, bias = add_6, bias_back = add_7, cell_activation = input_25_batch_first_cell_activation_0, direction = input_25_batch_first_direction_0, initial_c = input_25_batch_first_lstm_c0_reshaped, initial_h = input_25_batch_first_lstm_h0_reshaped, output_sequence = input_25_batch_first_output_sequence_0, recurrent_activation = input_25_batch_first_recurrent_activation_0, weight_hh = concat_37, weight_hh_back = concat_39, weight_ih = concat_36, weight_ih_back = concat_38, x = input_25_lstm_layer_2_0)[name = tensor<string, []>("input_25_batch_first")];
205
+ tensor<int32, [3]> input_25_perm_0 = const()[name = tensor<string, []>("input_25_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
206
+ tensor<fp32, [?, 589, 256]> input_25 = transpose(perm = input_25_perm_0, x = input_25_batch_first_0)[name = tensor<string, []>("transpose_4")];
207
+ tensor<fp32, [?, 589, 128]> input_27 = linear(bias = linear_0_bias, weight = linear_0_weight, x = input_25)[name = tensor<string, []>("linear_0")];
208
+ tensor<fp32, []> var_220 = const()[name = tensor<string, []>("op_220"), val = tensor<fp32, []>(0x1.47ae14p-7)];
209
+ tensor<fp32, [?, 589, 128]> input_29 = leaky_relu(alpha = var_220, x = input_27)[name = tensor<string, []>("input_29")];
210
+ tensor<fp32, [?, 589, 128]> input_31 = linear(bias = linear_1_bias, weight = linear_1_weight, x = input_29)[name = tensor<string, []>("linear_1")];
211
+ tensor<fp32, []> var_225 = const()[name = tensor<string, []>("op_225"), val = tensor<fp32, []>(0x1.47ae14p-7)];
212
+ tensor<fp32, [?, 589, 128]> input_33 = leaky_relu(alpha = var_225, x = input_31)[name = tensor<string, []>("input_33")];
213
+ tensor<fp32, [?, 589, 7]> input = linear(bias = classifier_bias, weight = classifier_weight, x = input_33)[name = tensor<string, []>("linear_2")];
214
+ tensor<int32, []> var_231 = const()[name = tensor<string, []>("op_231"), val = tensor<int32, []>(-1)];
215
+ tensor<fp32, [?, 589, 7]> var_232_softmax = softmax(axis = var_231, x = input)[name = tensor<string, []>("op_232_softmax")];
216
+ tensor<fp32, []> var_232_epsilon_0 = const()[name = tensor<string, []>("op_232_epsilon_0"), val = tensor<fp32, []>(0x1p-149)];
217
+ tensor<fp32, [?, 589, 7]> log_probs = log(epsilon = var_232_epsilon_0, x = var_232_softmax)[name = tensor<string, []>("op_232")];
218
+ } -> (log_probs);
219
+ }
Segmentation.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c3189a64946c75bc24fcb98afe89ad78c52bdbadfdf65e857fb1b81e2cc9fbb2
3
+ size 5959360
config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
latency_timeseries.png ADDED

Git LFS Details

  • SHA256: bb27e6e8833ddc7701740d982c7fc8496498d21aefca47ad57d7e52084f54d9b
  • Pointer size: 131 Bytes
  • Size of remote file: 406 kB
metrics_timeseries.png ADDED

Git LFS Details

  • SHA256: 2df1f5ee421b024eee8cdfdbbf2c2f710c579aaebab2bbd93a1408f972c0e780
  • Pointer size: 131 Bytes
  • Size of remote file: 161 kB
mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b
3
+ size 13412288
mlpackages/Embedding.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "DA2168C1-B6B3-4CC5-A25E-52ACC35661D9": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "DB1E857E-AF95-4682-8517-9FC174EEB644": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "DB1E857E-AF95-4682-8517-9FC174EEB644"
18
+ }
mlpackages/Fbank.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "2ED4FB0D-3597-4106-B4DE-47FA8F437F96": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "D6E498F6-7781-4907-ABC8-DA4F1C8E03BD": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "D6E498F6-7781-4907-ABC8-DA4F1C8E03BD"
18
+ }
mlpackages/PldaRho.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "24FF4CF7-C6A0-4924-866E-BF4CA046DCA6": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "4D333B44-A04E-4369-BAD1-2D9EA4032C46": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "4D333B44-A04E-4369-BAD1-2D9EA4032C46"
18
+ }
mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0026d3483c74bc989fdd1649c5765ca5395235a6d140a698a2d87b95cddf56ae
3
+ size 2981120
mlpackages/Segmentation.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "F3D13EE3-12DD-47C9-B314-D5151BC27D14": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Specification",
7
+ "name": "model.mlmodel",
8
+ "path": "com.apple.CoreML/model.mlmodel"
9
+ },
10
+ "FDDA7263-4CD0-4C69-9383-E91745F0FA4A": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Weights",
13
+ "name": "weights",
14
+ "path": "com.apple.CoreML/weights"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "F3D13EE3-12DD-47C9-B314-D5151BC27D14"
18
+ }
mlpackages/pyannote_segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0266f4ad4d843ecf31ef9220ad6b80616b3ec64a4404b64f3ea0371554e236ec
3
+ size 5734720
mlpackages/pyannote_segmentation.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "83A0819E-7F2D-4DB4-B491-430EC19C3DD4": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Specification",
7
+ "name": "model.mlmodel",
8
+ "path": "com.apple.CoreML/model.mlmodel"
9
+ },
10
+ "A2C1DADF-F375-41F5-A4F7-4FFCA18AF631": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Weights",
13
+ "name": "weights",
14
+ "path": "com.apple.CoreML/weights"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "83A0819E-7F2D-4DB4-B491-430EC19C3DD4"
18
+ }
mlpackages/wespeaker.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "009DED40-0975-4516-8D97-1B4C1F2E0194": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Specification",
7
+ "name": "model.mlmodel",
8
+ "path": "com.apple.CoreML/model.mlmodel"
9
+ },
10
+ "7EADF76B-4665-4535-8666-2071B9C3CDB7": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Weights",
13
+ "name": "weights",
14
+ "path": "com.apple.CoreML/weights"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "009DED40-0975-4516-8D97-1B4C1F2E0194"
18
+ }
pipeline_mps_timing.png ADDED

Git LFS Details

  • SHA256: 03d6b103a33c9cad8c580a73c8c61cd88fef254918982a8962cf3e2e18fcfd08
  • Pointer size: 131 Bytes
  • Size of remote file: 121 kB
pipeline_overview.png ADDED

Git LFS Details

  • SHA256: a61d18c0c0a8f3bdea7a6f8806b9524ee98fa839fff039503dcb61532e09147b
  • Pointer size: 131 Bytes
  • Size of remote file: 150 kB
plda-parameters.json ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "plda_parameters",
3
+ "description": "PLDA mean, transform, and psi parameters for VBx clustering",
4
+ "license": "CC-BY-4.0",
5
+ "source": "plda/plda.npz",
6
+ "version": "pyannote-speaker-diarization-community-1",
7
+ "tensors": {
8
+ "mu": {
9
+ "shape": [
10
+ 128
11
+ ],
12
+ "dtype": "float32",
13
+ "layout": "row-major",
14
+ "data_base64": "zBgdPRxoGT+259A+zCq7PcLxkT2xnSw+1U8GPsdcaz1HgMu9xz3fPTXnqb1R4CA+2nMUPW3GwDsWXAE8KUUjvLBv37wVGmg8fh09PW6rrjweceC8HOmnPDIDFL0SwW+9EHt5PAlaDT1DRnQ8aW+HvZe0ljwNUrM7LwClvGjmVrzNBfY7Iq/fvCWgmTw66l884rEGPR/obLyT8oS78rhmOsMEbTx1U/y7ceh0vLrVhTsPngs9KNo2vOjeqzyp5Ua8YMtZvKnb/Dr9h8s8xbjmu6yUBL30gDG8SNNmPCFSZ7wCmco7tPqqPPGRFDyRCoy8GuWVPKN0ijwYXM47/kFbPNlLAzz+9aU8OYhHuNm3dTqePYi8Vk23u2PojbwFh9e8EleBvNQ2crww2Bs86HFkPBnDIDymm5G8JpCnOg8xMbwWyam6nmJNPKVciTxP/Qg72z0QvLMO2LxmcEw8bs2GuvYrfrwiUWS8j80OvAfgtrtBWcQ873f7OztJkjzu3tC7ynNsuz7Kprtf2ki7ztRVu7ZJv7yBbZ+8vnUBO9Oo1jsDgcM8UAQFPGNRLTycfGC8hP54vKA7Sju/Gkc8v+XmOyt+Ajxqozg76hh3us24B7spgM05mBb5OjP647vB8ha8oGSWO+2dLDxhZ5m8bt56OygLojuE7SI8DeOGO+BI2Do="
15
+ },
16
+ "tr": {
17
+ "shape": [
18
+ 128,
19
+ 128
20
+ ],
21
+ "dtype": "float32",
22
+ "layout": "row-major",
23
+ "data_base64": "soXRv6bDhjzQSBQ+sC6EPMTNbD21qe69dNZavWHnCr0wXLg7U3Y5vPVY6rwDqz88Q/h5vFMnkDo0kO+8ozV6PYKXDD2yyTC8T547PARnYrwgA1o7j4pmveZJwDyEbRG9hHyevJN1uDsdaiy9ofILPANVJLz1pHk8/PVoOy5r7jwTnvC8/4wnPYpL6rwn3VC8GsEyvChyNLw1O+07eXS/u8X+p7ooS4g8UzLEulhlFD0Zat48okEzO5I+PDxWozm8dSBNPax4nry5Lvg8eiUGPef7E721Pey8bkgVPf1ANjtxj2+8h/hru1jEC711Hgs9tm4nPasOCb3i+Wu7P/GjvLV7hjuxc5w8EJ1Zu2opdTzE9Ji6p439PInVxLs5Ig29MbOJO1WVzjt2plU8qQq/OyZJvroAgJk6jzeWvBviFr07qEM7pgFxvGq6UTs/66C6T46iu+UlpLh207o83MDWu5bd4rwre7a8nLscvGOMpTwk1o88BKUUvZh14bsMeAQ7wmwYvFLvWr3Sv1G8NKxEOwAyDLxCV6u893KPukghNrzWIw08S4lQPGIGvTtys7I7yxmcvMeEgLyGwSO7km+oPFGhhbzogiG9f810vAV0oDxuk3i82y+5PAaaCLx22Ts8GyqVPOf84bvtUR+87EtkPFLc9jyyU3S8HnDOPLKtODvV/p+8yUqqPwpR9j4Ph0U+pvNUPNeXMz7+eA4+cvJ1vK6wdb3MXAI926rsvS7Khj114jI9uENivZE+LT2gyJK9OrITPWkmujvvk6Y8iojgPPuCHj3w4RS9b1ywvMfPgT1b+ty7XXKLvO4wxjw0ZXq6dkSkvf6Siz2nmAq85MZzPXwddzw6miK8dkMjvXG5PzyG85+8gKBiuxEPKrzqVJc87U8OvAm5jTuOHQg9cJpEvCxD8rx8ro28FGllPLYjhD1a31y8GujAvDyY4Lw4qmy8rrhMPKlCz7vBywK9wLoMPJGhyLvt1C09LDI6PWM0vrzqtPS6+/a1PCfAgzttJDC9izgSvJMxAr31EyU9OsDXvA7o6Tx6uTs8ko0WPBWsAj2nKze868Tfua5tFj39iFI71ZnGvAEhAT2DC9S8fi38u8Rg9DuoQVE96ygjvSoGLLzqUYK9ztiaPEuQlbxwIyA7F8kCPfQlwLtaj4O8FlfOO+H+Q7wrlZ88twW5u0Lo5rsAmD487oEQvD7WJDmDMJU8X+UlPdzY47qnduy8eIkFvElNBrtBD1W7d3Z7vL31jDwssPq69mBjPIIszTwvSBG8BQrPuqelgTsPUCU8yqyKvPZkeTwP87M84hjuu1xytLrtpBy9uD82PAI4BDvqFh68mIQwvSGuU7zRUXE83GA1vA0Tq7284Rk/KyWmvyBdCL//NHG+dt5SvnjlTr62bN64UKzoPeGCVL24Hro9jbcSvk8eIjw+EtS7cHrIukk7Hr1B2xC9xnmAPSoSp7uI9I68eqIKPb9EgDu1+JK9GiMfPelpuDwiNII8me35PIMpiL2lKIW8d1DpO0t9xrzMocg7BoygvLmJszhnRM47ikTZvM6gzTqvaMo8iMMxPL0SHLw2S/u7cEz2vK2FJzzRRuE8ilczPd2KmzzT4c28DCYhu/1+BbxTRfk7t51bPFFStrq54us4tNAdPRxXjbwtgLi8gRigvAxOBL3bS1k8+lYGvO6se7uHITm6A5CmPP70czyecMk7R3yGPPliHzzpKFQ816wHPEb0Kjv5j5u7cvcDPFoJQzyd49a68+FcuQUMrbu0L5a8ito4ue72eDrXq4g8Gv7JvFQIFDzebNy7fykDvLmbM7yrOes6qz5GOsQRLDwrcgk9sHXbPOMymbz65fo7s0k5u++pRTzud4K6FgwkO4ONJ7yxLcw7hLclvA0WIbwZ6e67gRGyO59fj7v+M+i7zhRCu0g4aTzKmXK7PQOxO9V/Erorl1u7llm+OymvmDttO5C7u2GlvPSVhDxsn468v5OXuC3ZHrgtmcG8nQBKvCoGBjv934I7cTt0O2nbIzzHgCo8O2uuvCZq7rtEYA+7bGkMPTvpH70dBky/hkBwPzt9az5Fz0g/1rr8PqIyGTy3gNO9Kaw0Pte+mL1kQNQ96vb5PYOdML0nUxa9HsSNvSujOLvJJck95yPOPMjGhr2iZRm9CT5XPYIBnLqiNr+9fWewunpdAL1ylj88D/sjvUU0nbxYWk08O5c0PINKU7xoYRE9hGFKPT7tN7wPOKY7Z49APRjcrjxvVW28XP/ovPMiCT1w6hk9UDxSvREwVL1xZPw72ZN5O6xrSjygLAc9sYrQu3hzjDyFVek8KRcXPbQ0grxUp8O8110EPHEiPLwd6CK8rgngvFYPkTthPIi81oftPDRPzzyLC507Y4EwvCG0wjzBN4i5my3GvLEWL7vkOW87PfMVPBhYt7wk3JC8iciWvFXhj7wepZq8+OSJuuQ80TrAABs8I+dmPPdC27vVtQ678KkTPDTrdLvs87k8FOuhu1m8PDtawZo81GAGO5Uc1DtcTiC6tCmBvIZg6bugIi68X1xkPJooJjywx1E7I6KUvJpFT7rRKuY74RxOPFr4f7v3ioo8m0ZgPPf3M7zzCpi5dESROjOkQrsN1lA8PGHiu/dzIrymmFI8gOskuNAWEDwmdDe895/JPCxOH7wMRFy7GsRou4nnuruNQAy5tvQGPJcEizzPCxA75JGPOswUsTuIziQ8OJJOPHMyKrzs2gq+7Dpmvvd9lD39eDO/v9l3v5x9bj/dkR4+iEvoPcFOjL52IYY+o3wMO+YUUT5qtay9F5urPRHZDb5duW29rJBuPVOK+z3O9ya9vG8hvoXbir2poZa8+nNYvL4/xD2DSl28A6deve4zXrx4GIK9dEJ3PX0Hibw7XJ88w2VgveFFErwXuWG81UXoPFnTSD37cZC84AKePa01Wz2ZwrE9xzESvTPPTr1Mbws9d/dFPdR05LtCrlI6YIpKvaUqI71OXgE9ToMWvGU067tILz27MJZTum91J7xkTSq9tI2uO9TLn7wgaWg8J8HXO1i9bDxIFr28hkulvH/nsrwHY8O4vKsqPGA+37z7/WA8E74nPDg3o7xBl0w7BClaPBFGyDokLLI8aH5sPJQgozypW907qd4qPLxT3bsEraC8iN3mPDGYYLwnCsI8xsSBvH2zoTxhnAe9WtZFOrmS47tCf9+73UtHPO2uyTwyeK88kS07vJYtybtvBYg87716PPRcg7wXFX08rQldPB9EwTo3OHK85ZnvO/exNLoSlAW87dIEPVsylTzHv9w78QmNvCWLcjxedIs8aAkVvMb5zLxNgq26vv4ePfFfy7ws0aG7WuBHvH6Z1zzBIxw8EUvpvEvLHTt9Opm8wYTAuq5jyry0gZM6klLoORcgv7thHow7oGY4vPphjTukL2S9QXYTvVM4Uz8qLZW/bxg8v8Lqm72KyM68YeiMvZ0LRj573oS+IotPPSTbaD2Wwm873rjLPAJ9BLztvSe95OO1u9egJr0lH469KfzBPR9pMruSlQs765b+PA8miDymQC49BVwxvYXg7bz3Yxi7lhAoPTKljzx49sW7xV/oPIrz17tXhiq9BWKyvGGvHT33X2M7JCJ1vIs/4bwDEIK8cmVmvH3SpDzrnoU727evPOULQboV1xa5HaORPOMd1ruQQam8fgCxPGhJsLz15HC8ccuQPPzHuDyELua78l4+PKZNgzvT9NA7QwdYPKgZvDysCDI63nxbuTTM3jyXRQ88/YRDvFy5lTxEqVm8v/8JvEFypzqW/DS75WxguB06krvNqC+7RJyiPPf7Pb0wOy+8AgUMPYVEobufJcg8DWtwuwab1Dc4E9U8d08Vu/vJYbwcSa48ORYTPAgEtzwqJDA8eVzluyQObLsH1l48A0okO4gS+7rlcMo8l3YEvIxLr7ra8+E8h36mu+NDCTzfkUU7EMSEu+Mvhbu3Bv668wocvKISmLwfAxa8Yagmu1GX5TvyPGo8crZDPFEtILvZzYA5Zqy3vJq2irxBZRg8MyIOPIwugbtYsCA8VBwLu5m9qzx6VHS7Un54vCZrNDw/Jto7dPPEOlAwcrpySXm8VU6fPcqZ3D1WGYI+PjhQPRLG475EBk0+gk4mP6eulb5AZDM//Ew9v+9Gqj6YGAm/cSNRPoxwj735hiu9PdwPPXR17z22TAC8Wyf5vGXN3b32u7C8kPnAPEtAib0jwSY8t0HzPKwjwT34ccg8pe6tvVRLjLxx1eo7MzpmvctMgLw1SvS8APTLPSHJ8rzSbxW8Ax81PLUcDj2wMb+7Vc55velPFD2p+w49+D+mPMtSqbzJTdy8I6ZePQzaJTzeiNE7RWOAPIMStDxArVM7It/xuf5jvzykFAa5ue1UPO6fKbwPYJ88yMyPu9kMB71RZiM9MPuVu+/RrTopmt27DWkLPNX4hbwwqa88+9NlvfbKuTz7/rk8eKUgPBovtTzsF0e9BhsyPO3ywDuy/Xc87D91PPoUAj2JtaS7/csmO8c8wzuSNpI89B0EvfW5VTxjssU8Z04pPUOuU7yqJGE5FteUvMtJobzHiva6ERqQu6u4wLoONY48ACoCPO3hnTwVpGg8tcpmvBT9Ar0P2yU8gtGDPN10ibq1yPE8sIEFPeDOHDyLADO7p5DxO7HBVDyeWPe8y7wNvIE3nzzKmqM8f6kgPCBpIbx0RJO8loapuxkUrDtgfNa751m9PKq7yDzSj2c6nBMgPFxaXTz237I859W1PD0qGj3n5UO7b9J0u95s6bp32Zg9EBh9PCR+zTx5E2o+ZxXCvQUwHz/4N4i/RBTivuy8Ej5wEZe+kZUTv80X3b4jIB4+CughvmWiJz69hui9oXtuvSERSrxdp9I8D4jTPBnHSz48r2G9+am4PUOfe73ESx45z2vbvfGWi7vOkZI9reG6vcusm7y/UVE8V0HVPAVzK7vw7ng8DILDvV/xgr0CmWW7y/oeveCSubygpIi9U8veO4wdYjxLilI9XpBJvRzRsDyGIj69PABJPMftfLyuwUK9aQMHPYNGED3IxwY7XMvGPJUvrjrKVZY66/4Tvb/zDL3KsIK9vT1fPYw5jDtkFNG839kJPbltPTxtVtm6ew5pPKwPqjxWnYK8CTGDvCOR3Ttr+OE8EiC/vPOiwTzlndI7hvtIvabcJb2OhRa9CFtsvMabD7z9t9480YVmu/AgGbzNPpe77saFO0IQh7i/eQw9nCIJvS1xujxv1iA90iB3PB8KBbz5PPk8FByXO/rqizymXt28uWnHu5ktOLxHZQ48zsSVuopaJjtIptU70B56vN+j5Dx/xIG72RKGvFCpILzefpW8AH7pPLWvJjyBEIu7c2KNvFNQpDx5iiM8AJsBO+V5wrwx9Wg8pk1huuO8mTpAmZ+8IN1Zutr4Xjyd9Mw8zob4vIcbXTwBKhY7OILAPEtBEjzlNzu8D8kOvNc8FT4XNQe+idClPEMQ576aJh8+SihUvlwlIT+OGEC/Cn2rPLMrCj/ze2C/kG3CvsrMgT7rMpq+O3AWPQSMJj4in+K90Cg7vZEt1jwyJJa8fPahPYrxp7sSOoQ9+ZyCvJYFzT0avFE9CiqYOW/VBr1GcGo6nHswPetigjxP2Cw6Zk6LPBfNGrzu9pU8XhHovEEYD72bllC9PgMqvVutKTw8UcU8wGqNO7ob0Lt+xkK90KhePeHmxbxj5466qgdyPO3omDsRaDM9o7m+PXkqEz2uduM7+aipvD4h7rtUd/e8DXaNOw+sgLsnZBw90RZ5PBZu5Luy3mU9XY5fvGfGCb1fCgc9wXynvNvy1LwBOhK9BXuRvPjLIT1pZ8c8MFiWPB0D0jmsEwm8h9eCPEvCHb0dCgO9CbGKug4iUbwLa7c7iACJOnbMgzs3L7681XlOvLuEkryWWEs90CQ4vJwHpzzw5Jo8KvNKO8vAp7rPijK86Wwju32FdrxQfJu8oRa9u/GunTtVkkG8C7eDPJ1VwzwyfiY7XIoiPHpfHjsR0Ke8XfDju8Nf2LyzjqY71IzCPMySPbuBjBC8cPKPOsqPfDrlq807a34WvKdqdzwpLsC8ZK9RPMl/Yzu2fsA7n2EOPNNGkjypb487SNmUPPKaArphaWa7nYazPBCjujulaeu6+r63PCCbFTwVcgK+bQn3uxVGorwJm6i92BhfPt2fKr9bdZi/t2BYv6Axtz0wBNs7zVJsvh9PIz5godc9yrOoPSGf17xyhY28sZdWvNZC3Tzk3ZM7xuLJvYglFbykNkq9K3sTPYDK4z2OUEK9uD0uPAaALb6pFU69w9jCPB4LLrsE9xS926ovvecNVLxruoK9dYliPJEzaTyB/se9uZauPGusKz3n7128DqOTvfYiBLtwGXo8Cq1JvMh24bz+1Y28q0k0vdGQJr1ppYW8e30GvT+0hjvxscQ8LzpBPPtRJz3rHKy6PjKavPjPrrvOqp87UzSJO4Qz4brdkwQ8MnI2vMhr77y+s6c87O1bPLTq1DtoSbu7opFJvOHlnTyCjXw6OSuZOwKUr7tCQb67GpbXPHaGeDyYP/+7fuCROCYQ87v2j0W8j09Ou4tBX7mlQ008H48Wu90vjDpok/278qj6uxqHpzvYhBy7fyP0O7gagrw30SA8b28jvIRsFbw1QDA7PfHlPKzxhjyfjNE7Yq5TPHJ8dLqJj8i8/hQHvDUScLzbnRQ8uR8POxcmrzxj9py6PIcoPCEmXLswlI05P2mcPFQ0kTx4Hq47hop8PBAlObrJUqm7UZbgOqU6ODzBaV07QrtJvGVjP7siKoy8XgSxu+1S67vpTI44cIgjPK8jfbsRQmQ9NH41vSpQI712qtK9J08xvQ3l5DwnU7U+6ICXP+/Dx74Zg6O+L7wWv6WqQb/Iiri8Z6dTvvJFCz4eOx+9wre8vXtn2Lx4THM9vm4nPoIexTs7kqS9oWrqvCPvrb0RgDY9Aix9vUqnYDywFk882MlWvUMdwzxl1ow9a2OJPStI67vGzOG7Gx+cu9fh0b2e75I8rscjvV/Ccr12jBW9Dr8JvcqyLb1ScXg8MArzvGV2obyE1QG9TIDuPGME1jvaAYG8MsIOOxqCKT1NPT29YPNTPCTCKzxq6ok8kvhbum+llzxGuNY88WHMPB4MyzxdYd48J4aBPEYNYTxY7kq9pMcMvCedq7yMyV4807NJu9evGDsq+ro8s2UqOveXKzx7FPI6iiTVvGRkiDx+BQQ8quw8O1UNoToVRa07Ut8MPGBowTvrNKm7Yb8WPG63ILx1iZu8lf3ZPDgPprqb5Ks8O+q0OsqSnzuHXlo8YoG5u+AcAj1+DSy81f+NPBxGTrwYs2a8G/hXPCGKijsEgw28zq8ku9Wtb7oTGSS8BoTqvKXx6LzMbkm7cytYPI+23DoSptA8WmXDON7zhjrqIIU6uQDVO066mzpBY9m7QL1GO9WTR7x+dDI7jYCjOz9eQry0CcM6qeWyu+xmEjsiE2k8roERvCWqDry6ge67hX0nvCVu87xxzw++1bcgvsNOxL1+V5O99E0+vfLnZj6aeCK9XdMcP8OD2b6uIjK/macvPxj4Ob+LuVk+m72cPkB80758T7k8y6mIPVgDLD7/c1Y+38DBPRbMdb0eJty9AyQOPitRxL0KATe+/4TRvIznmT1YYTK+8NgHPeawlD2292u8e99PvTG0BryLQ1E9AFiFvXAkmL0fz5691mjHvRs+Q7zy9XU8mh2fvZ2vejyZxwa9c9S6uv+1nL2OdXA9pfNAPL2HB72GS9q8RHhQvNqTprvMBhO9Y+mJvT9RK7zdmYQ8cWwCPZwjgz1smKg8JAO7vGGpCb1zVTc955SjOxf8JryuQyS8b24jvUpvnTwNMWq9ksMRvLWPLDvjMhW8fmYUvddSxDyE5Ni77ca7PEwd9TzL6KY5gx+yvFTnkLwkreu6AIqPO/ipPDx/KHW9TZfSvP1Q17w0ARC8+jtPvAAOhDzMLJC8HmEqu00tsrys4S87cx9VO4hQzDvzikE9wZWkOyzvnzw3O1M83id9PAVHr7tDv6E8aYD4Ok9zBrz1sRG8LpK3O5DdNjw9/eG7XJ56PD44ejwtzU+7Wc7KN+Y5DLwS+3A8lj5qPENRhzo46pS8WydOPAm9KjzoNSk8xTqjPBdjerwiigI8jSocO4RSa7wQRZ673vVSPIIK1ToWcYm8lvIfPWtoIr4SqHa8X1EOvpJkMrwPGcO9NrcSPeI1Xj2eYkG+Mx8cvqlSRz6UCuo+GtORPySlT75HgTY/ipklv2Bi3j2dYIQ6uu6KPSnN/D3P5mQ+5OMkvf+mLr7BMaw+ik0evCxiHb1Aqtw8uhwiPc5gqrw0jr09CL13O1D+FD5FC5k7Jw3Wu8ECBT03Hi89ct5hvW0Y/rnnIdW8tsq4PCrGV70T/mG9Vd/zPKXzOj3fZzi7TeCIPBJOh7a/puw8PV0MPIU4nLxHFZo84J8hvf+xuT2WmLO9cPD2vA+CfTxkaiU9Tk0RPCw6RD37cg29Q7/fuctBBD0I6hG90jk+vdHr77yq1Za8Ftx/u6LjJby/gHi9X+eSPA/e6jyV++C4ZH/aPHzQnrxVTKQ6hqnJvOvXZr1Arxa8DJ8svUau8Ly506S72L9gu25ckbygjGW8XQ7MvNPfObu+SuW7YkI6PZxWjru/Kak8oCiAvKjXfDy2G/Y8eLxgPC6PmDtP/Zm7xxhXPCfJwDq6nqc8YKuTvPOC0DytTDM8ZgLgO+SY1rumVB49tfzCO1b+5rtINoo8Gf62PLCDs7w6EcE8Nr9KO44CFz15+CS816ujvOzXh7zuxr47zf2hO+EdGbxRk0M8+7psuyy7C7zIr5o8X+awu01L0rwgqpG6RJXUOUXnP7x0Lyi8iTSnvZvORr315Oq6mP4xPUjq9Dtc9pW9TV2VPIcHzr2RW5C90Fp3vSVRbj5Kl4W+8it8v8I3bL+hZDu+kqv4PoKPpL5WDgO9gaWxPTw/cz4QkGS+owgLviMjoj7K/Ms97DQ+PlWDbD4AL2e93lbIvdv6ED531+m88ZpnPkmB87zag/m8MkyGvTIJAL7Uo687M8zzOqZSkb2TkJ8951kzPXRaib0FQFS8qHZHPScPXLwK1Nq7FY4NPQHXjTwFcDM8l6+OvSUUYb3AKym7IkWsvAN9JTzYb5m9mla2u+LrhL1p1Zm7187Yu7argDzFFWe9yyLFPOQHZbzoXNs819+fvAf6zbwEiI08mfJlPMN7fLt8pla8ZMYEvNudqrtBaKu8YVuVO/448DwYQ/u7tydZuwSWNrwnAFO89cOdu/JAyTubbBi8WQCGvGJu6rx3kQK7lyqivOFylTz4vu86evf9OvJfizw69YE8CU0zvddbd7xQhus8x8OKOoMMarxfGR08RsDXPG1cEjy/B7a8ZB4CvWRxSLzfaBW8U3RrPBf9pjwh5rc85a1XvNgVoztqPhq87y8WPePdaLqHab08KzUUPDYP1jsFK5y8rqIIPA9e57xssou7BAD/u7Nj5zyAaoI6ZTwSPGdVSbb6FSO6oyMFvO5t/Lrj6WA8Td+5vHOUDD0rzKI9VQTqPBPqfb2nvxe+/3ibvcfxBTzG+G+8GGCrO44lD74vhG0+oUeWPjfkPb66MZi/Q2ygPpKIhj2CFCu/wpyzPkX/hr1TOhq9/nJsvqGnOD5LmLY+9rK5voTFG76902S+CR8ivZNfDL3U0rw99UXxvGm4fzxBCyK+7dbOvXb/Er0La7u8Hy6SPRazZD3V5sq9CD9PPQx8gr0LDE+9U7chPaELFj3Q/bi92iQNPXgD1Ty5aIW7XTeIvU1y1LxUo+w8uWdgPZ57vDy1eDG83HkQve/dhT3xh8k8WiD0PHe46bzJgbS8SWMvPRUy87vZM5U88hoTPERc3bwMjSw7wjpdvBB81jsm8RS9pJMAOj2UnzwxtoY7ru2ovP3AFT3czPe6rtDSPBty+bzA/d68RX2ePMacwryVytk8yTA+vFEaM7ttzwU8UqA0PBKXJDzvQa88TlSsu/0wObochsS8dQZfO0vMh7wQnJI88eQGPMcQa7vBQU684/NRO7dQaLtXeoE8UjA2vF1X7jzOVjA8RmyQPAvIqzwOJf28RhdHux1ZVrxjWCg8J5XKu0F2Xzzy/Zk7Yx4kPBo0WbzxOxi8tW7LvDeovTuO+Hw6+UmHvNbhu7ywdUS8zL34vF6K9DzKO5W8ZD+gujqAuLvpMhc86iIYPKvLLTzp0Oc7efQRvP3r8LzkCRm95I2APZoUWj0j3z8+sXlDvdkO+z0gg4s9BkWVPRnvjT0HMuE9vuqsvoUSj77kloA/l3haP/VFDT+eAK29C5+mvo9PDb1GQsA+Vhbsvarrqb1ccyM+d+EXPoc8zj58DQa+woN7vkQShb3mXtu8Xlm7vTGvez13pfo9ZD9wvTzNz7y0v/I86YidvTWdzbvIwry7OPdXvcWxiDsvBZS9ZbhJPAxeNj0TDFm8LY8Ive0E3Tulp8M5y0t6PNjDHzz5/eY8NlrQvQxlkr0+kbc8KMllvV/1h7p9FBA8paoCPL95xrwH64a89qi4vOcFiLyeWx88ZrIaPX7YFrw5Yqo9xeBfPTafojukrc47VsCRuwtL8rxXRsQ8sUiIvJms4rwUIQA8/QPFvLEGgTypfiy8VoDJunyONzx0vAk632eZuxLRdrzKcHo8QO0SvEdG6LxhxIe7ZTdguvOavDu0SLe8Sz7DPByuUbwT2YG76Fe0O3AmRzubUe06u7RePFu92TstMJM8v9vTvHSaMjyqiDk765YivIZF4jyRjEa6LzQPPUr0mjvu6gG9ADCTO8dFeTzBP8o89ZWjvNIggTxe+Ka5XFdSuqdA7bzuA9e83pAePDI5qrwUIoI8q3VIPBvoJjsYBog8v4+rvJ4zpzs5CHA8EtZnPD6qGDxFGuG7vF0PPk1gkL2fZCG+pkLePS8DSb7fNAq+W0YRPh3kObxZ962+b+AevxCKzD4H6ac+fGZZO1djA77YCLe84n4rP80hST7Zhce+Cq0bvxIbAL/SseQ+7YahPVE70r5R2vy9KtMDPktzNr5zF5i+9o0EvQF4IL56AwS+cWwlvdVeeD1WBqE9HqA0PZ496j0HgoM9qAOvPRWV2j2TMx29haitPRdnuD1TsJE8FZAoPQZMc7t51249xcc3vI76W7xrjdG8JxQou6DFCL163Bm9y1PgPFxO5zzLZuk8Hvs4vVS9tTsaLR+9hrERvbm15jxtnTe7cUcfvTnzPT06uBq8hTDZPI/QcLzGhw29ni/aPBWaAT3KVsC7ZnttPXHe2Ttkfh486ht4PCg6gbwlCDY9uqwzPfaIxLu0+ao7FfTEPCiLDjpWUlO84P2LPHZNgD2atjk9LRukOyD00jpeMze97K67vOe1Bb2HxCs9SnOqu8jlfLxcdBu8x59bPJmPS7zY5EC8sGhXuh0T1rxRj4K7ePquO5JvprwQerY8qcrnPG2RCbzVFaC8ReoIvKrDIb38saI8w/uBvE//Bb0gnJs88Z2GvG4FOztf07y7/unlPL+BPry04Aa8ZB73t7Y5fLyTF847614SOxnC37zqetI875PFPEV5lzsOmeA7i/+iPKGCBj28Jr+9MFY0vepHFbxeCwg+ypIrOw5HMz2crYY+II4UPsOY8b6wUY++a7rzPm7YBD/0oVg+UETuvnsnPD86uVS/Do10vGznjb69bm6+OI9XPn6GQL7xcww+RGzWPiqt1zurz9s9cofePOP7OL04F5K9Lb6GPadLXb0zQ148jeyYPAdKsL2iZAC+oxsIvVFVZz0xcQ69crm1vUfqAj1g0GA9XJPevTqVZD0Up1w9nef+PYLWp7zJvI886sUVvZuGC72ADo47wy64vBE4e73Zx4i9U3GePGh/D70Vo3I99haXvWjZXzwhPoI87Dkvvar/pDyJvT48MQmOvTqGhz0MgvE8v6ExPE9Z9DxEb3m8ptdYvN7nrDvXZTI8hLJ/PaOZ3LzqohE92WNkPT7asby67gu9rX7svPBVjbuJD9489N3tuwWj7bz7UFe85xknvOsShbzMmsu8UAzPvFto4zxi2O47KTzyu+mgQT1Nqp27pk6TOgzbULyc+S29BUw/PH9rTjw9syG8sYuZPE83nby52B892ZVhPCmiFjxHMAM87xjIulnjnzwdyTM7FGXFuzOJBLuojAY8TdELO2Qzojyxqhc7F98tPSp61Dw3nEa8MlgWPBRDWryIdf26Z2CAPMoX9DtC0hg81cS0PIRGPTx34dG8Joi6untrGrx6M9s7HrQQvLvtfj3zlhC+w0B3u3YlTr4neQW8wfhlPOaMjr0opCo9IBu5vbEnub10HTo+wquyPhfeg72iEoO9oC48P4O7Cj/4WWE+8KjXPqfNLT+ufwm/LV0Bvjw4mT6/rsy9O+qDPqAArb4y0TY+GcLxPoT/rL3NHRw9UWcBPg1UQD7IBym+//x+vJIz1LvRTk29J4wsPTP9+rzM17A7cDvgPfDUaT00uxO+YopivbfYlrtk6qe9GkJvvey6E72ujCc51/OfPSqSdL0oSIi9hkAdPUw9cb3vhdy9+yo5Pf+a7LtxqRS9jhLlPPi+Ybx5Pxm84La5PYl377x0Ak+76UK6vCH8NrwhwDo8oahhvK3Wpr1LFvm8HT/pvCW1ebwiHGw8pamZu09Tejx4NZi7FmKfPCdRBTxonE88vNCIPBYGPL2gegi9JJGDOzjzlrvtZpK8LRQEvBds6TxKYhU9rQVHPOqdKTypXLm8EqIxvL9meLseSyi8zfeCvPPdwjkDpi69gbH0O08Eirx5S928IuzYO+qLjztkW8I7RlM/vUVYBL1NZRy9Lw09u/GZrzxtQS08db5LvFKKu7vpG6I8ClnVvOrH7bsYiKo85rHTvHUQGDzg3Uk7EJ6ZPP0KMLz6u8c8tMfDu1Eax7nkjWy8nUDKvIJqCj1Z9Fc7lHsKvcZcrDxT14U8Xnu8OkFqAbqVXNk9jcZCPXIyL71c7LO9x/IrvYkl2bxLvyU9sR9uvXig773coK69/BcQvj9pmD4OlrU9jLpmvOhMHb9kWjG+LhkHv3xFXL8ahtO+9ncavcp3Jz9pciy+I+mzvltjiz54Ivo8Vg1xPpU3B775MYu9hpMdvkUzLb5S5oo8oqiOPuFBPb7zqg28VnGKO1Oahr0vJR4+G5JoPIOovDwF1hG9tKx0PSHL/L2XBtG66exgPPwiHL1kZoA8cMGXPem+Er6EBww9tSI6PNfVeL1spqc8TDYgO7inbjy1L8o9/UuwvbGogDtChG69lYnAOaSZyLz9psK8pphCPev8oLtgsrW87UAOPe6cJb1xdTi9fqt7vBIeA7yQblE9X+4BvNoQsTxC7Dw9hqgFO29kJztzs+e86bNGvIEsVTsYUEC8TiG7vM0ISDwqBRM9ot2APe/SNT0oDOu7V/JZvEgHRD1SmOW89SN3PI/Xwryqch47FUsRvI2GazxVbja8pkgTPIYvpjx2k407gVOpvOn5Nry6v5Q8FW+NPPHDwbxDI9Y7ppLrvEQJ1Dv1XOg77O6jvBPtbDyy02A734fOu4E9ELyK6Zu8QdiUO0lbFz1lR1M8/cyQvHfyBzvs0wm8vY0ovMyxfbzTDG87umxPPB1SRzvjTUk7PAqwOnaaQLq7jmA9gXravABx171lByU9Av1SvQ/G2D1bz+M9MGGmvWMjyLymV+s9sQgVPjDqGz34s4c9G7ApPDNI0z2x3ns+JVj8vgivjj6+cja/oVk8P24NM7x1DhA/4VHLvkjsgL2UJyW/LrwIPn+Dvz5jx9u9mYRrPY713TxN5e08RL8kPZuwiz3Ly729C73Uvc+nNL4aDeS9x03fvXVrUr0A+r+8rP0lvOzATD1+eoG9zhr5vG5sLr1mQF25LesMvawHCj3w0Bw+jhoRvP0xHb3l+A69Xu+YPLaFwLvdb1I9sozhPEhsHL3esXc85AcuvcPhJrwGmHA95n3UvGnPtbxvX0e9yPdbPJTgOTthJQu8OuKPvBivYzzInQM9O/EEuixS07zHR5q7R9dDPRsokryYIRu98X1kPbSLqrtlG+881hYjPcy6lDyP5hg9ikDHusrfy7uziD26pum2O3tQEz2Jpe88K92CO/Y0krw2F0a81WWfu3l8DjxMtoi8VJ4OPF+5jLyiSxA8lf8KPGUGAT0LdoA6nqg2O6kFxLsISoS8QbAcvH4vHr3Lelg6jQW9PEYSIzxdDS+6FInCPMGBpbwQlrc7zg7UvLnOPzwuD987oD6PPBxWu7vdqtw8Yw3JunEmED3UXrC7WYLUu9mskrwMKzY8fTZJPEWHgrx5Isq76HVRPHZ/ij1S31W96kNwvClbT7yko4k8IDsGPqgoBr3hWPY7s17jPWDmDjwW8Aq9KBDtvDcN+T0pZ4U6eY5xvhquzz39wSo+ffSlvxwoyD7X7To9CI6cvo8FCz+r5pA9BItKvjlamryWWYW9i2kJP8TrQLwZUO09s0oGPD1sID2ThxS6G6bZPS3f2Lxq6Na98p3QvCWsvL2giwM9DzmOvVNdhb1a+C6812FKvOc4zr16Viu+CsbKPDYLGT1lgX49m0aSu5xsRD15fOA9/0I0vXv8XLz1gwM9OSsDPXoi3LtRTTm6FO3tuzcFMjvqir67F0nbPJ2FojzBiBK9JbBhvNN0yLtetOa8xuNdPYjm6buQhZu8ZWK/vLwEy7zuAFk9BVWYPKoQMjszRSe9Sq6YOyldXbwewgY9JaYcPU7ZAL0nJK26S5o3vJQNeryooQC9e+mgOipzmzkTToq8O2ppvJO5n7xY4Eu8xTAfvTutt7zRZIy6Z5evvBCFn7wbR9c7Bwa5O7UgCTxIOFM7uwwvPLGvE719iL48N03lvHZFHbyPRCa8ikKcvP/wwzubPCc6N7gnPb4OhjzaIZu8tWt4u32MFzxWIku7DP/ZuN/9sjxYYca8gTCBPDgGYDt/ct87xKN+ultag7xMpd25fweWvOFmELungY68oJo9PODwybxV4HK8V3/aPOUMwDv8W6A8ysTRvdFEoD2V5no9PuLfO8o2kTvRnYK9jzDPvV9trj2uHZS8mR03PIwL5zwxAqY9xuIQvqKrgr/HDFy+JQAiP36wdzwX5YY/RWJVPum7Cz6zpsU9+gvkvS34Cz5L9AO+tXNuPR2UTL278om9H+TFvfH0DL2+WdM98uduvZSuOz5ju+e9ge2+PeegcT2RQ0u9fMQCvammiD2pN2q9hFC8PVfLkbsy9tk863T8vH2COzwTzA891i0GPO84c73P9zc9HdJ/PYoEoT3ce1M9lzahOpLAiLzbwGq9a4bvPOcpuzxLhSM8qYT2vCFtBz1jG0g8WEpavMuk6Twpd0e9NeIJPTi5A7z9evI6lROTPJk8PrxyqzA8OFYdvDhx9rvWNpk8V7gDPQbfFry48iQ8JhPkPFKCtLy4KkK9e62/O7jL6Ds7DnQ7Xt8OvE5uBD1XcrG8ThFBPZYnRD2jb+87PSWCO0rkKjvef9c73PkkPVO5zzs/rK68NmmAPPRjEL2pQIy82OkQPEb4jry7b3I6EN9Ku8EFnDzz5YA7+nLZu2mbnLyI8UI8X6Fwu6bxmLyb8pO8gX0aO6j2Uru3ncu80HN6Ou+91LxQHw68cn0TPCO72bzECCa6QGCdvCKYWrpbaJg8MdePO+nKKTr0QDS8caoGvGisjTz98bO6pRi8vL0tmzzHeE09mpOVvDUcWbwxoII96jmbPKQgj7t+Rg480K69vaAYPr7V5Ao+oXX5Pa76jb7I1gq9RIedPoPocD7bJ3y+FZBxviE5Nz456I4/l0v/PoecGT/ENbk+DEVHPvNrl77fHne8VuTkPcgGnb0tcKk+PVLSPQsRbL524BG+dL9ivdftdr2IarE99Ha5vKkLgT3MaRi+3pYmveSh4LtyPIG9gkAavZpYg7whBoq840dPvemnNT1//o29jq7ovTQZ5DyLKtI9liEePOTfpb0GXdI8FF8QvSMFpTpSAGg75gdrPHv2ujsZrww9Rki2u9ygE72/Mlq9cTqEvafTwDvpKwU9DK7DPCLXgz2qcGW8zx8oPCJJIT2UhIy8LUoFu3FwqDzOvYa9O/CgOckYVzxB4IC8pMEtvC3EX7n234i8Z7KvPAcxb7zwgTM7OKkZPQoUeTzjBuG8g4mSO213oDxhVdo8d8QnPQwkG70DjAu97zRzO5R6HLtXVbG4TQi5PFIblzrX9yM917cPPIFhzjwY1rY6rdx0vLWku7uQOY28OwoKvND9wTwUh+m8jtISvBlkarqhN4+7Mt6mu9d0l7zvs+m7SuOFuwd3ELzneOe8cBwlvFjowzxXh1283r2fPMIA/Tsb+767P7FYPMH9fjtNZU48lAhhPJ+EWr1LExg845WSvXEAAr3eoGO88QIKvQA4gb3Fs+u73xQ0Pluo2j1k6xG8jK3lvYMhiz29cKM994IkPAM3hL7ZY9Y9fVLwvlFMOL5q/kK+mSH0PSgkD7+YUqC+nfwmPxp0Gr9TurI+bapXvgcDG7+dPaU+RmMdvoPoBj+KtkM+Y3DaPWR2Kb7OL+e8uYNDPRaPsrsWlne+0at2POE8uz0Z8WW9MB/+u5CtGr1pzga6kXwHu9FE0z24n7s9F2aCvfFVnL0RYC2+XdgDvKAwkT3bZhO++XucvVhOtjx16au99VALPRTRHz2i6w+7weBMPIt9Rz0HRRE97JbKvY4eOr2jwo27xsSkvJ0pYTw+Ztg8xXcnPfJgsbt5mz47nJfwPNXk/LztALm86/hWPEtPg70ow3A8uvxrPXIRAb05ezY9mysuvMCWPTxxrCM8NwZevVIoDT1K32E8cambPCuB9ryH48G8+7IgvN20Njzk+G28dWw4vBWgCjzVNlg6uPzlvKSKLLx//ay7+JjHvKSpvjxV7wo8ynWcu04gbLvGSlm8fPcMvYZCLr0P3/C8oVARPA1hprzhJP28XL89PCSshryAlq27Gwm1PH8cDTuNqwI9njzDvGzty7xKORe6wliuuw6ImzuCYNY8OjgmPGYsKzwq3a48EVfcO0CMIzvBpYU8g4YLPP/bMjyhnOg9aX/hPVHY+r1nIzM9VhKAvXu5xr122E+9sCWjPFTAU77XVGW9HFgovYSPTL70axU+e3SAPk9mFT/qBTC++sFfPaxS0D5zspE+TfqOvKCEMz839dA8tyRrvwYnxL76seq+qGuOPA8Rvb6en/A9WHvvvc44Wb3IaTI+rthJPkorMz4bqe+9uBeyPfcSEz57cS68gj+4vSw1qL1Ai6E9iu+sPSUh9DyG1Ao9MqMVvtBRG747AbI9pnDEPP0W4Dwxa4Y9fJG3Pa0Gnb2l8WK9rEAevU3oFj1Tvks8nnXTvGTcBT2ge+46M2EIvKA/vbtxXjG9yaewPeYFQb2yWQk8SPljOoeFnL07A/Y869NUO+8j7TwchUC8ndP+vHhrQD26/Ue80xEQvZF0Kr2ERPe8l3iuPJKbrLzjvR075InLOy6g3zzBqa+8+2iZu3kw+LsQZ+E8a55EvHO4Bjtf3g09W/HrO922srylXD46Ikr1ux3RIDw/bA29ghsLvM7vCbx7FXu7d/BtPanqojyjvmc7djMou+s57zw/kgE89lZeO5qzvzzCDS88Up8Bu0AS0zwpM648HTM+vJYWwLyeYRG8HqQUPdTNDDzrk948rJ4vu/DLZbyAb0O8ZQLVu+8ZDDzCjpu7kkWdvDKzFLsY6wm8wis3PMabQbpDLyO96LM4PZX3Q72B75O94A0/vWWwD7vqrZC7Kn6XvMbtgr21pWa7ARUrPn/3pD0SqBc+ShlMvVjMw7ztPr49mPwrviH+ibwAOPI+Rw6HveE2Or/4EYs+lqTSvrdk1TxG84y+AamtPvjlkL8bsXM+YITzPUTprj1SEH6+aPV1PrC2oj23Cae9mx2vu7yZTb660i68g6w1Pa48vr1u9rW8FxbnPZyvEL0xRe+8HdHTvJ/1GD2NqVs8/8gpOxFUab1L6K09mgzrPaBgkL3xSug88BREPI/6+TyJ1D2852M8Pb/Pa71brz08cFLVPMvKkrxgPzo9xfwYPFdv9zzYkUa7clFSPcX9xDviBmy8XbHrPCVRszngPe281m9TPItTRTyzemS9zoYJPdJEX7ynRzu822ssPXSfP73SNg48sPQrvGp79Lvpf1q8nmbVvIH3mryYhEe8e8CevCg5W7ypw5A8jj+kvGxSxjxi03Y8TcrHPFk0yzxmIyK9s+LAPOa8D72IaC+84JqKOj8egjyS7go9d3OivEJvHLwqsiE9JoaGvL3Ub7w5uhm81pHDvJB/0zws4V68EnzkO6CoQD3+BQI9A+oIvcgsfTywfNO79+rKvFhbZDz1uuU8mvYsvEOG4zyIp6s8ONejOiyAXTxDrKQ7Z55hu0CqyDs5hp28izLSOjX3Rj0toEY7zP0DPgEfkD0ZCP07PKBdPVMfQL3JtZY8zUNOvgB6mr1CFx09sMvvu/b/fzxLdCO8mdWvvUTvXj3NHou95buGvjfwO77go+E83SaMvbvpnb6QgYK+4tRqPy+rib3QEpg9gD9zPp+3NT9J7Bg95pJkPhxFtL5+Yye+1+apvo0Zzb3r04+9ZoQ2u/AAF73KnMs+pv47Psujt77tJKC9htClPWpmNz4Kq9090PMhvr2JYb7cPpy+xRW7vO7xh73Cs0s9lVynPbeiKb0/p2Y9MUhCveLwAD5Yl3g9BVsSPXeIxz3cbPk8Y6+PvA61C73XxMM7RqUOPXM0ST0UAQa8YMCvPSShnb3ESem98BCkPDpd/rw2F+g8YwJ/vXqy2bvn/Rg9YjgxvfZ5rb1sgEW9aleRvS3REr0Gxhs9ycTGu/rPR73Z1FW9nFOyvE0JPbxYQT69HBvGPMJf+DpOZcq7DK/ePPVDGzuT2iY9ZFuZvJRTHb10IwO6xgUFO8JDxry0bBy9NKDIunRipjwU8zO9EjwRvPiZGDwAVhE8Q1hcPOP9yDxmYIC8FBwUPXR1LzzugpE8Huu1uyjczDywU1q75s7UPEKc3DtXLxK8zcuOPGXh97yBIOe8gAMCPefcKr3GZuo8lcgGvOk3Ar0+q528lRyzvD5bV7tV/2I8dUVGvP4EtTzIqOq8MaXNvLtfjzxHL4A8N5cRPXcukj3UzDY9vuYtPt/JAbx98Nw9tEqSvbnu1b0W9bu9njrIPJtO074V0K49+FKIPV+jvr4NHS2+ReepPfmgPT0R8Io+hAfjvelsmL9vHc+8Ao4xv/O9HD6zlhu8e1C1vgqzlz5rO5i+v5RNvp5nur2KoPy9bxXCvfMryT3Iox49q0E9vqNacT0EutG80sIqPY+lbj18CSG+w4GGPUTEZL3t4cS97ciuvD4ypD0bK769fbZKvU8RV72fyTq9sUNAPYVffb1nLhK8zVqnPFFXL73iAiO9WiPXvBQubDz1bdG75qc8PajZKT3un2w9aQlPvTJpkbzFly09kj3UvBP2r7xHNf+786M7vZnmkzyXneq8th27vFf3BT3rOa68KGgSvXoUvTwtpEY9Fsj4PGYyBr3UDI+8rKNhvHoXAT1f2o491SGfvTqA+bxsDPs8qf+1vMyNhz00dui7ucAkvULDf7uYZPM8DqHUu9rSKb1WfMm7hb3BvGv6hbsdYEW9rBlsvNkBGb2MUJo8ODW1O0tnljyTEBA8xqA7vY1lnzxzy7k8BQO1PHTWWbzIUYi8j5olvd9VXDpY4d68tNCSuyDsPTycB/E8lZlgPCy8ODxF9468aiqmvKcBo7xGWVe8BsTauwr5uTxIx0696rj8uwji0j3UJwm8hyZCvXfiuD1/nVk84K8KPux2zT2P/sw907wgvmoBtz2SjAQ8AgivvHMHMr5HNko9YcR4vAHRPL7E0Yk9YpdhvfRFtb0AT7M9JygWvrUQS74sWJY9ha4LP1yQA73y1Sm/QNZnv9yyur7kuQa+ERUevjaiE7+80SO+6GboO/y2RL7L5dO7a8YMvK+Y2j0139o5HhlwvmBDiT0KGYk+q6uAPpDqDL0tGxW+T2qavgN+szwwnlW8FkPXPXCNzDylrs69tWgKOy7hvL14NOA9VOAEPQOinb3Qsda7BDurPB5uZr3/Ht07DBcXPLNtxTxlsn+8MSY2PU2XHLvq6rO9IxvFvUC3Mj0gyBQ96m2OPen5271jKFy7SJX1PJ0rlL1Jf6K9FzRwvX20xjwWfqk7l/kXvfaPRLxOIVS8dBofPEFhRT2g9kW7FmDuPBJNAD04gCe81VLJvJGBmjx52Wm9tlrdPKt8zzymmRK96/HYO3bvLD0cC6u8CDWVPMiHfLxUWz09qR2qOyUyfboH9IE8lMscPT5fHzwmO++6yCgtPFVi4TxUXi49o44ZPVzJPTy5+Ss9yCn3u8vrSrwySuU5tcmhvDW1+TxnH8m7ofcYPB96/zwaaAo9VoKWOkaL9zvpx0W8MZCCPD1DVbyCEqa8LhufPH9mKDr3QjU9phRKvWj/6rzjUL488sirusrDoz2I22o9u9OUvHyDDL2YKTU+CddLO8O+nL28jSw90TvCvek49r2EcmO9g9woPVGV6D2gRD8+cVywvuRWtj0rRAC+D9Y/P4xY7DtEpZm+rJcmPvU6Vj2HVRS/H4RHv/2mILy0DTG+85OyPi5IkT6KP/29ko/tPcOg7T4OWBA8VjorvghZvj4V0FU+RHucvjEs4zvwlfq9WVFMPtEBnDxaoMA9Iiu2vYFB5j2Y/9s8IR/SPEos0z0fTHq9V7ZLPouZWb0reeU8pQrLvJvvxL16Njg9nKIUPHGTej1X96K8WbkcPPHribwdSXu8VfyLvfd6abx2fQG9dY/UvbcpZLxtEKo8DIXQPLkjkjwS0YE8BDpIvIpMhz3bIOW8K9gcPb6owDt8nJA7Rl2DvWYlID0lYuu8YA9mPYILLTzJit88Cfd6vAkEkTyXQV48v+nRvPl4Dz1Oazm8oweauzMA0LxyhQ+749XlvLIYxbwAhAw80xajPKxnzry58u47fPLtvMc6Eb2hars8kNXhvFo8Dz04R+q8gu6UvInHfTxcPi689uuhvKdqBL2sJZK81l1zOvbAPTwPzwS8+y+cPJlEqzwQNt27VHkrvekbN7ySW2O8KfLiu8Z6LD1yMYC72ArRvAok4zsgQ2689u0OvOZy5D1K0tm8mwxgPbUx7zyL8BS+nzvSPcKGNL0sEdE9oUbFPZ0f8jxNKb096njKPMMgS72w3zY8g4gRPiJRLz734GO93bbxuy3PfD2waqM+CXdhPSugLj7iCZY+1XwpPrFQxD6aqYO7k//nvnRfsT6YXaY+ojBlvyP5rL36MIG9oIPSPnD93r4BQp4+/me9vEpFt74g/7G+ax9XPlU7sTycURE6ByFXvkVzwT3u46G8wMWYPUcVpb2+MeW8UlIzPlBbVT2xoWI9/mHYvLneAb4dXe49RxwZvY3/2z2/ARC8K/tOvXU93ruvG1I93hWKPdgf6zxlqAY9WLWgPaGf3T2/zAq9C90NOZ2lqr3UXp+9yFGiO0Jik71To1C8jFrNPcSLND0RJ6C92HhhPbMBZD03VNG8OANavE2W/Dzydeg57JZVPFQlfb2lIeg8jAF+OkLUBjz4N6G7AyyevBgPxLw7iW28LiYjPQxrHj1Woe+8+Zszve6NpjziKm+923KyO9orrryYFgU98zeVvAqGuLzmDpO8dhU0PBmFqDsxG0i8zgu7vLGhuTwcozS8J+zXOlCjRTs8KNg6Xv88PCDU17x7EBc8qMNrOhhbb7xOQVg9LnQUO6IUNDx69ms8uUwEPYSSNryoR228150OPQaFHrwMgzM7Xr/mO8rqejz0D6U8UKTjPEpZATvpvpe8ZpJ+PTF6K7vh5cK7Fj1APnnMgT1zQ/k92BQava+HHD3eJmo9BMa2PIaj0b0pYYu9nT92vg+VUb41nM68A0knPZ3gzTzlQgE+RVp8vt3E1T3Mksg9CEfbvpxfsr5x53U+IyDHvkcAVD81Ag4/CtPIvgfyLb6K3cA9qzPIvkL3hz7IanC++GsDvzg1DD0PrLM+egmbvrHM5r3vWWE97b+FPQcLxTzZdKa9vWWpu3qm1jyqcB29OFrmveLkgTx8haS9pYEgvvu0LT2QLV69CfuZPM5DXr1VobC9it26vAAohD3db6686jifPfYGyzwRYyu8iQIqPJSh3ryC7sM6qZiJvZj5+b1+74y9nq/zO+SDtL1YqYO8Dz6bvFI5gjziOte8KK61vIoihjyiHWi9UgU2vNtwObzFFpA9WFGHPCNiLT2SzAY9QlaUPGxJMT0uNJw8FO6avUs6Yjx2sCC8eJFHPL77Vjx79ng7iuxEu3Ynnrw97Q29o8wcvWkTKLyblPa8/SddPOLvGbxqfnI8Dy9JvMiiSL0h3uE8W9MhPP3zQbwONK48yL7VPJQhZTwzMPI7M27nPB08LTuBM368buwDPSToTDwuL1w8nDQSPa44Ubxzq8g7gG3TukiOz7yMJmy8lrkVO5/MSbyPELQ8mqIkvKawPzpuKKY5nVaBPHZdxDzaSHI9Bo+TOzh3Tb07sNA8F7QKPBQiGT1zQiK+nwbHPO/sZj0OCI+8zkQevUhFwz3c7XG9wzoOvasQsz3JyEo9SogfvUZkPD6iOee9GcUZvpWuEr42BTK+dSQPvqmRhT4O7CE/DJFdv6gePj3l1O6+tJeVvhnhAD/3+Io+qDTJPjase75fSXm+MJ5BPfNqm71FyMq+IIlZPl0caD5Cots+sBujvSo6Jz76zPS853KnvA4CkjyvzYe9SrfVOLTqOL51XT69iqQKPI/61L3lgIG887thPWAb3rxPsdG9J1ybPW98kL1xAZE9Kd6TuzX5Ab3ZYpA9NGhDPSbohzwQ8S460luGOjSfM72/vg09ZmSqvVXsO7whT1a9fx/4vA5T2j3t3m+8Wa6BPMj2UTsdEiK94t0FPFcaxD2kzFA4Rhtevd+JhLzHBvM7dC+VOZucV7ssl/08UkAKvGXco7x45wu9tkmivMJ0iDteabs7WE1fPafXizyLAkW8lNCdvAAw3DynYQ88tnoqvJjZMD1FvZ07hdQKPSBN9DvK2Kk7/43Fu86KsDv+KIy7ICOhPCs5mDzQmpc8ZB9Mu6ICSLw3WiI9TcK3vAsVHb098XY88PoZO7T3rLxTxRO93IC4vBCcAbxaktG6FFUBvbnLmTrQYAA7D89WvTVNejwfD4I74k1MO0dVcD2byxY960rrO1to77xREbU9YBuNu0BctzzwnYC9fJoOPiscrD2+SZk8tYQTPK31Kr3UUeE9O6gRvrMpq73jda889iIEPchqLD5uTWY9mHc6PSI1zTxqg2u+asi+vlSAOj7mO4a97mD0PRyUfb8su/4+AU7zvrIzYL6MjU8+xYvwvoB9Az9wZB29vGq2PQEznD5OVCU+3hYpPj4Igb3W7NI90M05u8g8m70o6c29KUHwvCZZrz6+w7A95B10vdTwZT58HQ89vO8oO3EzhD3QJsm7a3AaPR8alD3CDpo9+E6WPRH/KLzOeQg9t0gqvRn1vTwf17c9ftZEvSnBoL3ch4g6iydQvT4FHL1OADq9UpvfPLI9OT1/4xa9Cu/EvSKjjT2tZa289sRfvcHXAj0xXVG9aPycvEOrubw/5lG9PQcRvTDhqrx/q3I8NngaPeUPoby1i/e89pFuvINYlz3Bta09zMQdPJMW5zxADQ0860QyvMCio7s5hw+8ZUVHPYcazzx6kas8/2ivPLkaHz3tLge91WbqPL3GXj2HLW48GLYjPfb0HD2ArwG8LSt6PC5z+7wv3/08sXn8u8lHf70pZCY9jY1hvKEnuLp4S2Y8pu+mu3l6tbv7zQW9So6kux7W6Lv4Djg85kVWvDHi67tI0tg6cAkpPMJMVr3uBDS9eSO3vFMSZTyuAHa9qACvvX6Z2rzLpqg9V1CWPduFTL2a+po8E2dXvUCXXLzTBCM+YfO6PYEgwD0Au+E9M54bvnj0gz5Mwfi9pSwyPnvfZr1r99y9HlAKvZX3Azxqsv0+udGcvgZCCb8/Vfi8pZINP04cnTzQ6Aq/ID4kv9rqrD5swzq/q/OZvodFjDvNilw++kYiu46gXz7jKbu+zvQHPlT91rxkUCc9RwkDvhMthL2LjDk+K2wrPlGRnrzmRHc9EaYcPYc6tr3IAIY9R/bfvHX2gDx/ON890LNovawwQ71ZfpI9gM2kvX9lD7xbcDK6FD8OPFu9KbxDHBs5By+APdVlCT1DdTM8Eo/dPQXMqjxSNrO9p7ZIPftdnL0UhWY7tV0rPSoRwbwaTUA9whO7PKdG6Dzzw/I7fayXPNoZUr1oHga9I9uFvOD15jsxDqY7el9QvHlhiTxwYEU963qzPCoezTsvpDS8P0a9PJCYqbtKefs8iZZdvYLFpTzFwDg9fiaePNtCw7xsnMO8T20fOtY23Lw2SRO72bMoPOolY7yapQu9rQsfPEHTCbwXqsA8cnXmO/Kd6Tz0eE07vkjZPDrJvTxQXle8VJODPOnwBj2zrWw79zc3O+Yj3DxIdCC7CBF+vJ8MKTwKzX08dFOGO6qb77wR0LU7yYqvu1xbwzzxj4q8Am6pO8PCNLybDVk9yD0uPT/Hj71M0Z083xNYvJHsSD1Jz+I9PpBjPBSFrzrGPJ88D5KLvDp63Dy33EI+Li3hPTbBVLzsjpq9OIVdvpAWT74CTKK9BLc1vsiAir1vfzA+HW5BvA1zN710tty8tmsdvxzi8r2POdu+F6EgP8lEHj+8NGQ+voVYP61P2j0JAR09E+cmPuECVb7Imsm+kn6cPo1U7b1xob892eC5PFhvgT3GQGw9fN27PSuSfz1CB8g9kT6HPTCvW70Re9O9TJZGvcNxPbqRgq49oTjzvXVPTT1muAy+YRsfPQUCpr2l24y8VQ1+PbnEPbxyWEo9I3S4vVuNqT3d6Gi84KyfPRAbID37ttI9nV+4PesGYjzbMq8889XXO9/3HDx4jN+8DtlhvQBIgb1Ifhi9AECTvFkcizw++9o8/rxQvVZaCT3C7tk8Bo5Ku5RAazyJvJa9mG59PW4gnbsJ3BQ9dupqvIi+rDxm0j24iS1GvWr0xLl/O3K6yJK5O51xtbwoShw8+r22PFVgwTzd+r881HRbu3GyTz01eI48dgblPIyt+rtoYxK9cE0tvMK4JT0f4Ku8IfXNPMQPtLv9F4q8NpKbu3vHObul70W8Bh7PvMopzrtkWo28ENw+OuJumLylXii7b4kJvbW2nbz/epa8K0QUvDRmWT2MqSc85DoEPRmmNb0j3hk8ecKSu9QDuz0D98k9SP1yPaUE270M204+v0ehO1NAWT2yD3W9DoRbPUHvSD0hV709PDwuvqcotL2mrU6+m6pzPI3Ie72zbUa+WduWPER55rzHsp++I0eePn3c3L7jN+C+3VF4PoYaIb9Zgse+D2cRvY3tVD2RStC+86UdvzH0tT68cHK+QwEHvzLbDr6DtYK+uuDevcrYlzzokgw+58XWvDljIb4H2Vk+Xu2PPjT9MTwicPu9Ar2lvQR/PD32m7C9Z9L1PaFuqzxEseK9Y8u3vGrDwLzTSAe+87yoPd0Kl71HoyO9hryKvcbqsb0vSg49OGq0PaXzl7q/OcM8JnwGPje52LwRDf48GtKnvLwwMzzhBxw6g6kovaum0TsvIF29fsCoPAfGIryWPCY9QGMYPSNPpbxcoIw9hqjzvHabTTxORXC8F4TKPP9pgjyQjtO8VdSPPJYVOLx1R7k6kTXAvCtP5rwtktg8gysUPS9siDwXOgw8D5JSvVjpzbwL3aq8KCGbO/00VzwwU4U8F/6WvNh8yzzWfLK8vKs7veIWIbxmYFY897MrvUFgOLsjZbm7G/0QvXlfvDygsIa85bwoPGqnlzwGv0Q9yUcnvNHXybxklck8Eg3YvGvot7tu/X88SE7YO3zpxjyrs4g7FwIYvZSz7TvNKpM9lM+svMw/VD2Inje8v4PqvJHFZ7xQHrA6rWxXPU1+Qrxn7vM9+wYRPvEjQ71A1Cq94qWIvRdvcbxUOgm9NYpTPZKByb3CI7S9GWrfvS8ajz1lj4A+4yXCPgz4D76s8a2+ABb7vpa8sb0ggWC/VdvePeVcBb+e//M+YH4QvwNYj7vZK/M+4majvBUczL6rP++9khtKPhLInTxIQLC9iqz+ve4gND6h2yy8CRp5vbaJ6Tx+asK8PHMBvs0aob24J0a8W80MvBouQb0qrYI9FBwnPdbUjL13a0u9swjpvMkjezykyfc8xMlrPBKxG70jWU08u6+CvcphlT3Qmt09OnVpvRU7+Ty7Evk7qnPvvUP0TT21UDS8cJwBvgKdiLwSSLK76eqWvVCFtrwqeaK8w1FdvTlNLL1ynNW7JP5uPG28mbx5Zsu7lNpJPaIHBj002LU80ZrMu66Rcb2WDAe9IMKSPCHltLzEqlM8lD+avFwwpb1YfuY89FPsu2c+jTyl46E8WOpkPVBAyjxR7Ny8BaoOPCu27byLO5K85OGvPKCUhDsN1LA6LLNOPTTFHD0ovbg89fvKPDAp/LwH0NU8S9nUugIpYLkYUo08qndIvHTJqzy1YSE7yfmiPGW4MDww6Fy8/dZBvMrOuzqrcS28RvgFvdhaNL0+e6u8/CpFvb4dgj2MT1W7FPYBu4hvXL2poDY6CRk4OiiYXT3/65K9QPYfOwn6kD1F2Ue9A0/NvNEgdr1RBS48HzU1vUl0+735wwc+f6CIPoNsk7lyDe88vfuAvFY5bb3K+Ki+PP/ZPcI98b29+NG+QIGtvsOgET17JUk/aSyQvR3+6r5Qmly+ZTOOPpquur0bt+Q9z4QdPOZqYL8BK+G9XjlWPvt4iD5iHLs+Qb+LO6D/oD7wphY+F4Z/viUwv7yCFp+8MioNPgUxsj10Wyy+4702vazBAD5GwoO8/8arPaIqyjxvufe9T6Z5vMXOGr6GgIy9zwerPZOH5zyhg1M96RQIvrydk72U6ge9dR0xParslrxbXQ89uUfnPPP+NT3IPYM9vofEPUtmpbyP1pa9ZzwGu3aQS7yUWDC8lY6Zva6g4bzrkUQ8EkFKvcFKJr3fQHG8TXOdPEu/6jxOt8S8dY6APGDs2byzbtW7hNNXPHCPDz3LUKo7e0oMvW8dYr2sqDg9SRdLvOJvlLypnJe8el0qu3+qo7znqwi9jSUDPVuMWDrP/J88H/JlPLHUGTyzUJE837JZvBKVJTxdxtA7Iy/JPM+RcbzLGyg80VyHvClFXzyEH/k7Nvm7OxHXljtVTCu8qEr3OzzdDDu/zgQ83c+bPAFrjb07InY8DfSEPeAMsrxe09w8y6g2vas8JL0F14k9HLc+vc6LTT1dIDg93wpvvak0LLxJ0tm7muoPvZbdmD1ZzjU9024vvSBpE72xwiS9b/LOvIdRTL0kzQc+KrP8vUIfbL0C9EK8KeK5PcehDb5xSC480GDKvjwNDL7i2pG+r0M1vvb7LL48B/q9OW0mvrwZNb5JSg6/V09kvY0YqL58GNk+sGCkPoSL2L65ZZM+GgnePY5XNj94Xaw9v+vmvuuFJb4mGBs8YJUFPkv+1D7tY6K9tz1CvbDXXb6SVjs+7xotvohkrD0fNgW9bLS1vDSY5rxay7o9s8NJvR7k67wx5U49KFfrPRNVfD4LisY9mnFIPrwGeD1dQS49MfWyvD1npryx+aE9lpdZvbYz5DwLh8s9nvaHPCAH87xykqy9uCkLvBonzjy6xMo8vTtIvcAkDzvl0vO9tridPd+hMLwC0vO8wqOsvUz1j73ZoLQ8sk7gPB5GlD0sILM92oivvB9Qjj0FfmI86Y9xOrqy8zydUHQ8nvYSvKLD5bqR1Lw8Brqyu+yFELyMzBi8Qk4NPTuxlrySmlG9WBBWPLdZSDx7RgS93WoFPI5jFzyeygS9f3XjPFJL+LyAlZm8JxIlPDZP6jyZagG8buCEvH8MuLx65Ui8K0uLvHjcTDtejXi8mkD+vKEUqr1wUPI8waMNvWOSVz3lbya7gZhrPEgQnDzC2Ti8oGMGPRrHyrsyt9S78nePPMyF6zvRS6g9zvS8vd7DsTyW+aW8zKaUPC/xSL6kSDk8LuAlPnQpsb2VXUm+tjCJPWDX3j2H0ps95ZhQvkthTz5sYw8+Qnz4vDLnmL7fIwq/6x94PvfzWj+is9c+q8ghPqAMM78UzqG+/nOtPqIFAj3vKYc9nTzFPm3EFb7jrtA+gmJQPdyhpL3c9Wg+jECAvrGU7TuSUbM8Wc8jvsvShz3bcte9xTRcu3Qf/Lx+ugI+nB+GvdXbXT3FGQg9eScyPtL9g7z3PCq9WgsYPjxPyb0bhzI9xneWPThWYDwHDZY8Ze5WvMKZlL0jsvm8vr7KvYpy+Tx5y4k9Nw2rPPt4f7yeSUA8rQqDPIKPjj06mmE9Ujy1PXYIyTzIoc27lIEpPanagLxmA8A7ZCWXvI85wLuGNyw9GPqfPIkBN70MSIo82K7NO7u4Kb2sgSm8klcKO3ZymTw2roI7vKz1O0kJTT22ET099TUyvZJKDb031ZW8pjiPvZUaJr395ms8VgKCu9HiBb0M6mK8dmI7PakqTTxeNcW7O9WAPb7JZr1976q82sz1PJun27xY0tE8tcy+O/CKXj0ThcI8v6uXPMLKOTsIbCC9BLAEPEYvJTySVWY9OOzuu6if272sA0q9LNC4ugeUcTxasXW8XduEvIfUJz0IiTO9uKuHPQWeE72phk09t8WVvHTFnDyrZQg+haGmvaphm7zvC38+KqlpPUVUxz2Ujre7nLg9vRlvp72njPA9Ps66vTRQPj3/WhG+lT0pvfMGjr4y0o69j/wHvipccD3VmwC9gP0UPlg4nr787pc+pnyNPmWvzD7mUgw+3nw4vzZK2T0xVJO+HZYbv7rENj+Zzva8+nDxvXoT375/Wz++tE1APpM8tL2TjZo82280vnNar7yseKm+IoMzPp6hDT4QgAO+ElayPfHEnb1MtKI9J2hqvBjFHj7278K8bC4kvZE6C72uwyk+zIafPZKtmD03eai9AszZvFuxib3BKdE8k3qIPXJM4zzIVoo8TGj0PEYiVb1qlUY8obSGPVa7Yz39tR09glzjOyeJvDzgDzS7IjhLvdLCyrxLsPS8RIg7u9EOCju2lDG7w/VFuw3qBrxEqsQ7kmaTvMFa3TwTo7y8Op0uPIitHL3d8zi9nGNjvZhDW72tcT+9OwuMO89nwrxQtZs7RpR4vc9UM7y4Eey8lv1svI6OuTujmio9JBhxPWcmXLxo4189I79AveKtjDz4nbw7YVUWvZ5sszuNxUE5tKP/vK0ksTys/4Q8SA2RPEmiJjyTsFG7MuwTum5Q5zyGXVS72xAIvCoZ+zrKw2y84h7YPLmCjzv8YJw8C8qfvIczGrzV/NI7UBLVuvhTj7wsEi49HvFcPb/0IT4cHQ28itcwPWGu8Tslf/Q9wdrSPGTfBTw8cg08JhtkvYmcrjwKqnM9X32yPWazoL1LPko97gruvCxkK72A5HE9YusgPfDTAL6Rb9m88+9wPbbuOb9rod4+yZ8Hv4d9Yj8NAoy9grcqP/iUOT5DmA2+danZPWkJoD47JRO+2fU8vv2+tj6mNpi+er0bvvUrir0vlEU9+aYuvdfd2b2WRL89UL3PvVSRoD2et1q8oBZoPTlRhr3LScC8BdBPvkseZj3chvI82mmKvSE4UTxAXjg9rpGuvJ9KhD2PMvk823WZO7lJDD3K6JG9ZyDDvFKbhT2WXjY980a5PdZlh7wQYtY7Gog6vXmOJrxeLrC617lau9UOEL0Z1lW8sI1HvP6lhj3HbxY9VLINPDl7Ojx4aQ09wAUZveoVWjuMAxC8YONsPMKre7wMrZo8b3+bPCV6Nz2I1na8m3qRvLRvG7un54099O+EvKxNLbzoNAm9/ntoPfAX1zw3RyY9fAtnvGj8njs6eF66wOU3vN2x0LyF1lI9WaERu4iUBzzKWDY8wu0OPEG9+TwATPe83v7KOkfvuLz2RsG6G3/RO5GJLrtDlG47CnSPvBBwBTzlm7W8A+NpPexzoTvgu5o7ksPMPH7Vw73xnra92VkCvcpmwLzeO9Q80vWdPC4Htbx6U4w8o0OdPC71h71tiNA73LTEO7mU0LzrNB08svGsPcNblzwBTiO+TtRYvF4k+z3djIw8XFh8Pua9nz38cYY+TyZlPiPGLr/Kw2M+XXBDPtv+sL3pZLu++QoCPvpVhb4m/yc/BCxPP7hS1r1IG3s+1V0SPnBj+j5RI0S+w06kvZz6zT4DUcW93NBvPT5paj7hMCk+/tnrPS/YHb0kWmw+hYKpPXTwMD2WBDc8jNecu8Ai+D1HhqS91A7nvMKkJT4Faio7upNjPbefKD1n1kO9euYePe44fLxUz5W9MAGQvZ7ep708/P+8oEtuOwwdJL16aWu9e1YzvS9eWr3EQPM8nSkgPRzTQz0cngy8BghEvaW9fzyYaVG9WXHwu3/3hT3EsIU85Mv8PGD8brzJo+Q8pEBCvSxLLDw1dM089PbWPBiwRLsCwhE8xH0QvRrGDT3J5yI9TkgzvacwXTxZIYI91zS3PGWQaDuEIEE8VzCnPHIS8jsxNyk9iebhvLyg37zWvwO8MBDwvNziiDvoiJA8Fll5O8dhIzwiaTU9m6NIvdpDGDxqax+8/DYDvbsl1ryouws8cKmJvLS8WT20VOM8L72yvCe7PLyG+ZA87hCKPCjO2LynGCw7LNh6vNl4iL0+yhm94I0HuSz73j2dFj07bSQivWrpFj2bnMK9JR8rPT+MgbwiZaA9HtjEOwRelLxZsBC+IMY/Pm8bCL30df45LH6TOVMRrjq0XPC8HcuOPUt3ID5b+kY9nWEFPYBThT7G/Qi+bzO/vtfndD7UnmO9ubyovuNzwj4lJBg+w8ypvia61z6rfcC9fWdNPqnncT4cWW++8HW2vltCuz4C4xA+eZH2vmtxCj9NQAA/+NGpvupYdL3OJ669kFLCvvZ9gTxm0Bw+xq5DPhRJMT6Gj587NRSzvVvgXj6LRZa9Ka6DvFZYTz0+rVi+Ldf+PbR4xb2R0Dq9Vv3JPYULHj3R72S8C2tbPIdJer3hT4s95JGSvRsUdr0QNAA+pHCpvQ4Duj0d7J+82I7SvNnETL1kEI68XywwvuulETs8jxq7CYarvfbgqz2CdBk9w47ZPD4jSTz+7+c8e/unPX1KJb0MxJ28uSUFPSvfoT0pmT+9PaUCvEQR2DvC/fW86MEIPTU8PD3zN3Q9lxhgvE1wCL3s1QI8AGoxPaQHlbrPXQs7+cK6PE/Xbz0nXeW86XpTPGmri7xGvjG8yrDkPCx/PjyZpLU8nRkLPXQadj1lQIE8kKTtPPvVU73ewKk7i96Tuuf/wLu+FMo8yHk9vVEWBD05fEi7WljluyLLpbyA+807V4A5PYNggzy2xow8iiLHPDL6er0d7F28qiW4O2h+AT3QxQc9lgiYPelIsj2sLGO8CgsIPJtrVTzwg4U8cCKDPa6Gtj2t6Yy9teZ3vSKhRj2IfkY9me4VPdrN6T2U4Lc9FR7MvV6gvrw6vA+8b9olPaS2Qb6DbHa9C0xRvtKFvz6WY7Q9m2RYPfjnUr0h9ue+NDQHPYutGj94wcg+LVXdvvMtCj8weG6/njTSPd+93L72Uke+998SPcO3gb3/dgq+m6DSPDTt1707Cza++ZECPiaEGD0bHrK9iDbLPRGVqrxrbMk9AFWOPGXeBL5hi2I8Tf0evevM/Tz/CnY9C+A0PrcRH725NRM8p5wzvBiPJL3gXUu9XwuAPQb4vr0KMys+o/QFPQSBIDoHjSi+FOSqPe9f3rj5NwM9G6ouPQ9qS72o7mu9RiiuO9x9Wj35LJA9OKqWvcjlVr0Q2189bBT4PHJesbycz9Q8RMGOPNTSorvoG3C9vii6vG0IsLvPHvo8ZVr3vCYgGL3ivfg7Xto/vIqjy7xpmYu9IBiJPRrw4TvANuK8Ttz4ulalszxN1SK8l1HCvMODU7wBgNy8u8vkPNXIjbzRJtA8Z8cdPBDnpzz4kp86aCUUvZig77zNZ3o8FmeSvEeu8bt+k9S8qFdMPBMEHr2EZ5g7yfHYPHwks7w26YK7k94CvS5ooL32Ovw6Q0L4usfq/LwysXa8jIkevfQLCj29GTe7AA+iPSJnETwjIea9ZA2bvJLkGD6R6tq9wHaePS5Hjzu3ouW8ton/PBGKNDyRa489IC9RPd8lIL2neM89R09JPt1KFr4Y5jS+zyQhvty4lL7ILaK9hRbdPZhmFDy96be+db7GvhiqEb+AA6E+AnIqvhKvQD/NNBY/mvPUPalTrztYfY8+Q/WSPmL/rz64HYm+jkqCvcOmij76qqG+r/SoPjieob1f3TM9ItjFvQhuWD5s3kM+VtgiPqWTC75Nu6C9tgPoPX3X873txh2+gD2oPdjqAL5t/g++klUMu3HF1zpLfS28uGUJvZZUJb3Dubk85YKGvA+dV7323gS8vpAjvclJ6jy9Kfy8lG6UvRJFLLv+wta9DpGtutEv8jy54dq91J4nveC02zyKSdc9Uiv8PGaHEb0deIU6soy+PNsnBL1wqgW9L+6vvB0037xuyoq9vNQxPKcWNr1OToA8XmSZvGIAhbr1dXq8FHM5PVERdrxfvki9y/RmPUJ60rzWs0C8IpshPJbhBD3cZf27sGKOvJyFMT1TVyA7hs0WPfzYCzxpgEU7Sck/vOsuPLz4FjY9sjMsPCPwJb2VgQ493gUZPMVGjrwQWJS8HEdoPbqkb7z+vIK95Q2nvNq5Jr01ZWa9Qoj4O5FXeL07NBK9DIivOzEc77we9pO8WqC+ulXjEL0NsPQ9jidQPQ2uIj5ETMs9U3+nPG6iqLyoqM+9WnwoPZ0XPT4pJn+9yDBnvGd1t7w5nfI7LWWxvVLk772ApN296itYPYspob0CEtw911GtPRurnb759ii+3uEOPLeyC76iVTg+PK6tPQKz8D5KcSu/MVqvPteX+D3lQ72+4EsQvcPkDj9Ehzq/q8HZvR9Jg72ME7W+cVnQvvTgED6TRv47WjlQvuXAKT5dk569r+pfvrVr/r1NpdW9DAPUvWxAvj3zPEu89NEgPsWsFT1WPyi+hMOZvW6wOT2UVDE9K6yLPMRC6T13EZk6n9bwPcgMkL2yWLM8rgsNPYH1hz3yiYc9VZIjvI4tETwjHKg8NKNyO10btT3Owq289WRQPCGiibwBgZY9HDWJvPFzYL0ih/m9Z8QIPAXh4bzywSC71Mq0PIZe5DwaFtk8cPWduyD1wT19bVG8lBGtPA6JbT1Q3De82gcJPY1uUr1drxo7XQobujSLxTvUPSa9+8SfvNoyH71wUCK9CozNPJ43krw5ubM8IAJhO0M7rDyHLx+7m92gvGuPHzsvIeO8oAbwPAUMfzv6i/y8IuOMPOyfOzyqZcq8bdmluxZLBb2aG1U9mE9wPLPpezyEYvC8Lcv2vJyhdb0l7y+9rJciPHKEYLyUfUu7YO2EvPTAwzwKIXK9tSjAvX/CCb0dUhq9UHeRPR7lKT2MQdc7Gkz4PFHDxL3BoQA+ZH8lPQF8mryRwWi7Xsg1vRtqjr3ht/k8W0JtvJoITzrGbgU+7yNVvTzZiL5spgK+FaqdvR512D5QRJk+PJG+PYgJhjx4WrU93rMsPe5IGD8d/RW+IAG1PjA0BD/tVFM/G0gAPwMUX74Odjq+yHn1vfPKK77/lq++YqsSvucHWz5VrAs+Oi20vnjdSD7oQhi+bLgcvqp/vb04fi0908bTPdspjDyL+wi8H7y9PWvTyD0ryIo8UoMVPgBNBL5jJhI+jGnhPf2Kuz0Ezeg9PzPuO96VM70qyjI9f5AhPQWFlL1QFTO8PZmDvaKRoLzarUY91OKPPSCflLxRRli9OeUYvGmhir3QJ429B8YtPYYe+7ygTmc8Z/gWvYwWcb304gY9+GSbOcE4cztD0Ek8WK/ZPFHiIL0ZwbE8EBl+PE6S0bzliXQ7lNqvO0f61DpiLUE86XnrO9s337wxyxo9Y+5LPOYTSrxxfCM82vPOPLtHMz117Ek888RnPE7wRzw5vXK7Vn3BPB6bpDwWYRs9ZR4JPOPcWrxsCtQ8qkoVvEf28LozdKQ7ZUQVPR1tDLxKyPW8BfRUvXtjEj3s7BE9gkU0vZynQb2La1K6RmnUO1ms7LtYyUY8WkYFPVr8jL3F1Rq9HMmkPX0+WTzN43q9ttWDvOquwTyh+yy9B7eQPVxnhz38prG9E09NPVLDRL0FGiW9UtEfPWNxtr17RsI8AascPoHwG76X4O695DwnPuL2kLlmcV++gUsHPFT9pb3ftys+fX8yPXq2V71NVls+1by6vtG0JL/gMy6/OrfYPuYfED6WetY+hESdvY9SQT4vSSC/B1V4PkdsgD7f7R2/Sd3yvVe7ir4NWp09FvE6PuOVyL1Urxc+oVuDPXfNAD0Y2y273Kueu1EoL739I+68e2ltPOM3Sr4OSFm+f9dFvVQWAb0zNaE9ZR0cva7UWDzrAAM95CtSvRqrhb0krZu9jZ9iPQ9vOr3eofo95MDRvGmNUT0jyWk8xrkZPT9o1Tz7Y989isnKPQLNyD2RN2W7VxVzvd4+wLzKfRo8+aokPcGI3jtG6t68Dvygu5FcDrkgK929t/wxPeIfQL2UFJg8aW3YvP0epbwWORs9/lipOkXDg71kqL88my9sPdy4Er1wWs281DeKvKfnhjx15BU9EXrWPLdpmLtqgKc8TPeLu+UvazwidJy8VPA8PIUOQD3abIA9+nQxvTG1pryMkKI8dUS7usssYbztEcU8OLmmPAmWubzPFy68Igvgu7K7nb3jHy89AAMYPaP+87zAy+s8jK/GOlf1NjzX37w8aU0GvOXpY713PgS9eI+gPXb0a70pcSy9rqXWPGvVyrxkchc6kP/YOwTeTb262lI9crsOPSs1kb1O2rQ93je6vOyMpbxB15W7kWxZvTH4CDxadQw+J4/CPvG91b1BkGa8qFVivs6XGb7O8Wq+gD1Iv2PZ+TyLPj++QYahPSkOs74fxpu+xNlQPvNc/zzs4q4+eW5DvyC7sj4y1JE+IJ8Dv3RDlb5uXAQ+yhtKPtnWqb65RiE+1sp/vSht2LwYE0y91wdwvVXp+70u36Y9OiH0O8QG8zzErvg9QsAPvnOzgjwEIuY9UpA2OxIXrL00JQm9p0w6Pa9Lj71wUom80OGEPGNcnz3/7MK9cCLMPQb+PrwM3MM9hSqjPbUgubx2U3i9A45Bvb7BjD3il4m9+EbXPd2IsT3c/TI7IwS1u+cGSDykWjm9ckRJPP6UCbus9tq89OGhvejCpL1XDSW9PUXDPJ+pELyetJS9cwQbPUMIXT361R+9K/hpvVMgEr02NJI8anSAvVxSDr0i+Z077lMTPDlnKzzVCEa61tnwu0N2JjqlyJc8Tm6KvfbUbTi383Y80Wg+POfa7rxILX67sMUJvFOY+7wAsAS6uq+CO1b+SjzKZD28FS4DvJ0LUz2Dv6K9pJgYvX3kcToaC5q8zivlvHAf071K+6K8o37WO1GDWL0dvTG9wcv8PKJmWL2aVAe8NYJMvSEDDj09MHg98oXSuyo0Aj3L3ve9iMwBux2iTjuP3ta9D15qPeU49zyTsSa+oa6IvaDfkT1caz69fwbjvdsh1r0H7xA+nj7KPB/4cj6Utpa+KGN2vHBw/L0kPCm+x11LPdhtmb4DicS9K1O3vhBOoT5SlDc+0Hlqvh5m7z3QmqK+IVq8vv4CVL/4qCk+csoIP8To/zzoymg+qBByPOyzBz0K0hY/zUpuvtWPS77nf5i+4NuxvpGED74mM6K9ZSO6vW5Rqb3v6C69a35nPFWZQ76/me09RidMPSmauT1NTBs9Pp75PPCjBL4PP9A8qNs4PWRdVr0MzEC9MGPBvXa+NL0GVDy9lXB1O9X8PzwPpMI8wHhCvSqDkj2DdG291XDUvXT3OT0Mhmg8zTgVPegHFj2fQxM6cgB/vCDwNDtkLC87pbmFuwHl+bxw8768ZdjIPHHY+zyKInC9T5yxu5eTQrwIDTU9NiVsPUJhETxSEtY8bjZmvP0B6bwJUIS9PZMwPB+lgL34Tnk9bQvJux3YLr2c1oa82ot7PJkHR72CWQe8pQbDO+rxpDwL+xg9rmy2PHB8xDsOQ7I8Vo4fPUZUlrwSiZI7oiuLPSbTp7w8M9I8GEgtu39cHb2lLqa77CwtPPucKrwb5hG9l/0VvKwtzLtqHM08SJhaPavZVzsjoma8Na+ovSeVlrwx6Rm7h6QVvVjFmb05rTk94bG7vOjwg7yeQoe9mxq4On1R9TsUYkA8JOJJuyNPEj5wZxu7isKqPXa4aT6PsjA9Ln5EvsH6vD2k0zu+xHaKvrfA1b6vSR0+h5dqvbukaL4gxy6+aIvhPvGVHT5m8ic/RdeYPqhrED8RzOY+bdtDPqPsFr3i+k4/PTCavoL2Ej75btU80qAdvhO00LyE8s+9/HbqPdSSMD6rw8k9oUE5Pk9pvj1QOo89iJSIve4wLz4op8k7cHUwPJ3dab6gBhW9LW4KPV6Wg7sX2JC9ui+gvWoVnL0bTSO9we6IPIqQI704Ay498x2gvRDXMb2MQAW9ZHAyPWbo4T0ei0C8UaYrvQTXdr3p/oi9RoWOvGo3+rveRoY9iTKGPe94Sbx5KVC8tweQvQzgGT33zBc+1VuBPZ+VRzyzvng9kVwOPVoVKL2vCny7SYlnPTrGtjqS9V08K6N0u4srwLyaoca8fVe5OvaPOj0k7QY8z/0yvAQ6HDxXYgu9DMDVvB9ZZDzjMfM8T7tHvNEKxLvr3tM8KfRsPGXEkjtJDsc8OO5dPO+QUzqGsB69xlHxvLBlFD1ZNBc9feUkPW/8zLytOp487xuaPKQwKLzx0O08Moc5PGFdn73pKIG8ub8kPP1I5zzK3kM9JmizO0iAFL3fpVg9fYiWvBGmbL2K0x49gYZ8umb3MLtcdA49no4FPTTP0DrsW9A9nkV3u0tv5zydfwi9ALcxvtwKMr7fFLa87pZQvucNRb64NSM9nzBVPrpuhT0TVli8SNUHPr7WVz7eCTC+Tey5vgDACz7FhA69W4ZVvoA9aT7xXX08n9ZRvg+9Yz8xrSm+oZ0GP64ZVL42Dlk+NQ+Ovp9ssr7oqW093DAUP9+Ev77Od1W+J2K/PXYXHz4X7aA91lrTvQ5p3D0N/jA91ZzVvNdjmjzwhQo8NGN4vf+VtT133yy+OGLdvZ1YhD6QYj69ja5YPvm7iT2og9y8ksRMvWlmqz2isug8OzW9PVKjmztN9q685fmfvULgfT3IbE49Gi2yPXZXh71/vDS+dZcRvdyXbD3/75Q9AH4ZveJaZb2SNwc6gO0ovR88JL0x+ES7YOR4PajQO71nBLO7v8YOvU5HCD3q0p28tChYvI7ysbxqWUi9c6EFvfCDGr08i5i8wVfzO8YOdz34eIA9RnUAvQ1glzx52oq9UyaUPHKX/LtqhXc8Zp0ZPBi4Yz0mNmQ9xYHQvBF9HDzu4xW8TAr3O2qnz7y6NkE749zHvMnoqrzkGj68dPQ8PRrGhbsg1GC9eaJ5PasKpjxfV+W9BPkkPe+cIr33cNc9sUyqPIJZyr2v7Bu9XEiFvbFsW70YUIK9c/XIPcyQt71rYpc7bO3PPRcbVrxxdzo9O1/5u+Kx9rwq9Zi8HR9JvhU+CbyA/LI95dOTPL9HJD6WLk4+o2+8vdjgqDslerQ9Tr+FPMjPf73OIts97WU1PvIDKj0o9m+85p4Mvj2ixz7eaqY+iQOtvvQbjz7LoCU+Fn0vP+zjE79M552+Iw3Tvuc97D2/V5++hJkRP6t8kr68pH29JRoJPxapYL1ldvW9RBVTPg7bNb40cKG9SyaLPIMHCL4TvQy+zzUsvSfxCL2WVS88ZOfRvcFrwz1ZLj+99Uc3vk1OIr1CDUC94BdnvJzUyb1Qyos8j23aPPOYpT2xndS9n4LQO9hbtL0Q1SI+V8emPEdhmT0Jnh89mV9mPcDAgzynGC08+1yXPJgOdb3A9Sy8u5XcvNklqTxcJri79WtzvbC5gL06Z688P11fvP8onzwfVpq8a84fvdmsDr0+VPK8epG0PI51Nj3lfAO90521PFQs3Lx3NMA8Nf6uu07Bvbt4RRu9HB/hvOxqCz1cHKe8CulUPBmVFz31oTs8Q0jYu0LZyLv6SQo9qq9fu3YTRDwME9u8mgKcPHBHXDwcxHU815xevM6BOD0utBy9Zn1zvOa5ejx3Lfq8gB+7vLfZkL00O1C9NI9fPHOEwbwxAGc8EIzOPROmBj0rvdG7m9cTvtFLez04w4e938dfPR9r/ryw8ry9aO7lvLXtj7urOkM98OvIPGWwpbxFB/i8SSglvBHskD3tLxM+7PxavlRVzLseZyw+wouaPYaRAL2fVHA9hB6Lvd1P9L0Cbiw8x7oDPae4Jb7IBIY+DXqLPXvVzj4zQpa9vi+Evru7Eb9fz6u9B3TvPnvFqz1Fy6A+Sb7YvAULYb8d1U4+N7EWv4oZhz7SmRo+MAROvYg1nD6Arae+7wHivA7ARD4nr3W9iLOuvZ5Lnb38ZPC91FUZPYzTj71Wo6S8p0rxvVHHXb5xrGq+Pk37PHLFBD7D2Ey8e7gNPVBXrb19tdK9kJc7ve5VULy/BrG7InCevYEL1D2Wnvk8Nf95vZ/VEz0/BtQ8VrTAPcKLeTzgQoe8xkLiPITvL7wRPLG8s829vPI4A71sw/U8wb09PYK+cT1VEQ49ZYWjPdzELz19fQO9JcYUPHAI67x+7L89spm7PGyvEj3sUp48PY+qvDEg2ryGpeq7/AkhvaxLGD23A4Y6K9GOu+DYMD3dsKs7Oo6UPVziTrtGjxG97uPiPGmF6jxAN5A7vXdUukTnjTtbPDK8OfO5u0vatDwLwpS8AwxnPSPU2TxJrom8v4zOvHNAAj1nTyA9izmMvVr1XT1tW4A9SMWcvVUAGjxWMPu8FTMBPYmRXDu0E7K8/a+8PC5pfL3+nRY7Bcm7PErwJj3xTCg9mZosvCgJcj1TxK89akzHPbbpAj4sENC9N8AkvMLjzz0RBKq91WKxvbCuSjxVN0o+5lZHvmwqRr0DiYo8cv3rO3hFjj3PthY9VU1aPo6mBb3c6oq+J6lNPmaJNz5elpk+D9UQvraeF76bU5m+7uZSPrN43r0gEpK/fjIWvj/JVb7QcK6+R+MOvZ8MGz5WMXC+bxjjPUk47D6LltI9KAosvqQS773nSzk+aJo6Pht6ZT5lV1A+NqlzPpMsZbxEIr093SskvpPsAz60IZC9JuKIPb27ND3vzXm9MFSgPACelz2wZp+8aHHIPYMrwjzejjg9nGaLPBhrGz0tWYU9O/ORvJPY273bWn+9dmEMvpP1rry+A4a9faAEPWBkTT1SeJC8JgOqvT1+H751l5w92MkXvUCxvLzxL828z3wGvVpkhLwkfqe88gCsuvkOrb0pKhq8eqOaPZaTJD0L4KU8C6Mzva+/Y7ygYR+9Y24VvChbDDhMAIA8SA+APRd/iTwF6dI9rafiPFmTPbnU3r08tHifuupPmbx6zBA75tadvI62hDxce548i/Z/vK3DMb0Adhk9lMUCPWkP9zy14/y8VnFvvQPclD1AkYo8cD/LvBV6S7x6ihy9fIFyvNa8iLxf9iq8xMYRPOxsmDsEH1K9jswAvcMASj37vuU90X4oO6cEZryjDVE9u++9vComIz04Trg9apQFvuZMdr0EhnQ9pxZRPfsbYL0J6J+9RqRBPXHRrj2k51g9NmL3PZyruT3xdT4+QHV8vbRQCb3em+G7nm/JvSd/mj0/DgS+6o7XPY3Fnj4QIaY+LneTvZ79EL7Chw6/LaBtvn/PbL2qU2y+ADAFvpmrLL8DNvG9MlQqv721fz7Hlom+1wUsv18oFT4vvNq+V7MqPjlfOD62JNY6qi4QvNelYT4phcu9ntm4vZDgWb5U4y69PkeePYasOLytcSA+QGeQPUxfA7vhk5c9xFWGvOcRgrygpY09MuftvdL0sz0XtPm9+1iqPaSXxD0q1Yg9pUYKPJajab0/tFi9P84QvSPbUT0XK3A8jjA1PWdojz1Qcv068NdvPUAMiD1/VvI7P6K4vB7hvr1tnAG9NbViPHXSjb2iCnk922ixPNpkKLx+Tpu7I1TSPN8fgrwDHiW9zItfvPAIqbwxF0U7olt7vbWdeLwi04E9cubGvLc0yzxlhsU7Nv2DvY363TzLHQ69oKWTvAI/0bqjxmY8YgeTOueKMD0A6sQ8lJeqPCXDQLtPCDk9l9sVvK7/ZDweU4M8AZM6vCF1wbwqISQ9J3iWPQNrbjx/RHY9eLauvVuMiz0Ryom90pe2vV2fHb0fQpE8uMHcux6qDD3ULZ29DcbcvGnRZ7zTFx690FJSPTI9pT2nJKs9WzURPivkOz1aeL49CVhiPZo7GD6Pl3O9iggyvSx6Yb6PupW9AqEivoiKOr5PYZI8QqtsPcykI71DCLY+lAv1vaM9k7wD4gi+hYSyPigSnz53m8G9sqiVvVvpdLxZWPI8KL12vRbz2b5AX5Q+QactPwfR1r7jBv2+55Ykv3OCnD7WHya+iw15vtKrdr2Bdes9Lj0mvmrbXL4n2Es+klAOPkC7Vj2d5wE+yqEzvZzDdb0cgxO+DJ+XvjLkIT6tn4c94urCvcxzQb48lo29VeIlvaOdBDyLS4W94sCxvanFAz3moPw9nBAXPjRtHz2JQ6i9o7+IvYB9LD1ZUnG82JhxvIXwvTt3ZvG8vOw2PeSqnL3ah1e9RaWDuzDIgT0LhZS7Mzr3vIN8Ir2bDck7t30IPeKHob2houQ9ghKFvUhYPz1hqKk8wkYRPPjylDzj7CU9mgy3vJ+fozy7/rM8hCxDvccAGD22pY286rgNvaOWCj2i66y8fPqEvTLbl7yVThO8+7gAvCZ4qDzB3kY7melvvGGiyjtZ4oS8xf2kuzGQWTmhF8S8wvHUu9/2Trv+8+O8rnouPSez3Tu7rqc6fTeRPHvwsTy00SG9GpMkvDe58jwhgYg7DiAaPRT6Z7zya0W8gQ9vPVM5db2tDa08euruOx2NzDv1UQs9bz0nvWpFkz0Thba8NZCjva7u3r3y1EA+ti4OPm8Z2L3xZGO8yRREvaDe/719opw9pnvpve60BL4YQDy+xALzvdBEl73hY2M9EedMvrQeTL4LN/09HJRPPuINkb7AG6a+ipr1O3RNCz5XEQ8/P96BvjU5S79yfwy/41/Vvn6XmD4yNpi+2+z2PlTReT6A+qK+1dy+Pb3YnT6oXJE+y3hWPjENxTzgxIC9DCSpvQp8Gz1HLXS8ZvIlPYrbzzz4axO9zNiCvTpUrz0uzpu9fJ/QvYlfk707pg+++YknPYM3EzwKOUA8tsttueA1r7097ei98pW3vcABQbzf57K8I60avRNN0bz/CuI9qisbPX214DgMUJW9m1BRPX5JHz3BAd682hMSPcI3SD0Q54493NlYPYm6g7tIAUc9lkBPvInAEbz89E27IfBDuykbCzzMCX48QS0SPLPZkTuK/MO8N3ArvQndPr3a7qm7MsQEvTpyyT3Komi8KurgvI5pLLwngDM90qm0O3o5Y7w2Z7Q7+9tlvPOHnzzbyis8oxxCvS+24TthqJy89+cBvVDVMzyhUtg8TePsuyLdkbxXxZo8gy3XvCP9K7y+PyQ92U+zOo/1tT1RvQI8IC5uPHwaq7xyZlQ88tCju2VwMb1SlFk8ALSsPMsIhrwsQ069rQ8wvSkyyzx2CdQ9Ff4UvdcnBT3aMF28OmotvZ4EcL2l4vO8jJKovZ592D3e/Wy9wmzFPTW2xTxIiwG+xQ4CPuhsCj4P+oe9vF+1PMZzNr5Uyxo+GxwfPr3Yo700P+O92JQePrzTFj4cVEU/C2QTvuJmgj3/ZRc/YJFSPqw1D79xwO++RHayPW3uBL7QFXS+Pt7Fvveesb7Csk0+uzOGPpKBgL5XX8S9i9GhPhYbXT7RycG9LZChPS9v2j2/CEo+jtj8veoO5r1R4Ac+rAGBPqDTN770ih28sOwIPi4ISj22+Lo50w2Ivd94X7kuVEu8zsiqu3Z8Cj4PkFS9rWCCvR+v/L3Naco9H1SDPJ2CoT01PC8+eFUSvVGA1j0vWd+9W+rPvaLuibzcsaK9PAzbu7+rKT1qiBK8pxnvvZuOLT1TBsI9p/S6PWphujzuWc484aNHPRsRBj31XW+8GBQFve6izLvhTCk9S60mvVf0yLupaws8sGQePRK5oDx0vDy8W7IKvaKtD7wdbpm78W+bvBExobwDxpq8j+A9PN3Wg7y5rbm8k4axO77syrwtfPc8FVcZPE/cujsj1o07BUk3PUR8iDxH34c91vxwPMvtzz2Pjh499KATvXnXOjsaPFQ9rJthPdwgob0nwpy9vNKUPFvAB70nFy099unIvNoEFz0RsH09faqPPcdpPTxftvm91J5WO2DSvL2PVRs9dwCHPFKf8Tymwsu9N7Ozuhq3QT0IKXg8L2I8vd9WSjxl1RY+aaLSPeqszrwpnYs9C+Givh7TpD3UMGU+B//gOMUfNT5FkSk+VfroPP5u7byzFwA+sXqxvmWymb40Dua+cab1Puq2oj1CnRs/0uWyPocrmL6wJwm/nvVTvxDZbr6mGUI+ObYYPf0YZj4a1s27622AvnUQfj0jTqw8KhRDvsa86T0BeJC9/eQ3PeNwuD1N4Ry9s9SFPXA/G72EGLA7nWwcPlXoXb049qM9kfY4vaNq4rylIXu6Ib3lvBkmFTwu3b681bpoPTblILzk1x09kwh4vPaDHD1P6mI8NhJLvTZppTw5G7C8A5kKPnsUmTzMVay9Xc5EvKhcm7xNKLe9WVKvOwwknT03Asg8LhjLvF7yTL2xO5Q9TpwUvYu/1junUeE7YBylvFhDkjth/Em9aueNPA19dT3vcmk8Hne1vKd48LzuWV67DqfVPDIXuDxuzQi9L70pO2GbgbtzbpM8wxViO7CYFr2NOl6866RmvHi0Yr1yUrI8m2jQvHOyCz3NzIc8nH0MvdyThL1p44s9Clg3vW97zDxq9Vm9vRq7PB5AHDxftcK8M1TKvOnd/DswWI695GKDvOwXtDxjwsE8AoNXvAFgzrxfxEK8DsgbvHC/JL16XJM9XjGIPRk3uzvlFQW9lgJqvBfFIj6i4wq+c+yIvAHoBr5eLjs+oE8hPcMx+r2WmYk9+1pQPfGmdL0sOZ+9kK0Mvh7/Rj5VsjU8RWKdPl6Ye76vkoA+YrvQvsmFgr5sqre9bi4YPvQhpL27KhC+OP97PzLUpDzYCHy+MbAlPKGIaj4fC4++Vx6qPlQVCT+kfyS+FBhNvum2ID7Mu2U+jhMMvoBqCL7VESA+KLDuPUeFlb5WyJG+zDNHPoActDz2TRi+6Oudu5nS/j1eJkQ9bOoJPaIV8z0s0ny9bRzRPByvtjwvwIG9NAGIvRxvob3+2Dc8i98JvTKiXzw5Qeq8FQJgPSvCir3JeN68HlqFPFE4tb01Eu+94CeJvbOfob03kDs9KIWXPQn6Sb03HAS9bKtdPV4pTD3MxHg8IThKPABk77zrZH68pAigPSnuxLrpe5494OmePP4Sj7z9Wgg92A/VvdrRBLy7BCK92lzBvMaXbL3drfs8SHxSPKxAGLswYoy7cqaduTOCijyG51Q7N30DvfCcHTw3ocq8kR6WPBw52DxOr2y8ve6BPW1lkT3WxSC9il5nvZV3ijv7H6K8SA9oPG5iRbuxXZy8nBLhPIqrOjzfspq9fKtrOlYWIT1IS8U9NzeUu+A5CL1fJY68GmaJvWs3DT0GLTU9KL8tvOUb5L25Z2W8AAAfPrH3cr2hFfg91y25uyevmL3k5Ow9tSOpuoDM+jxMNeA8WfdgPWR7PL1WKWQ9ALwZvulXOb3F9do9zSX0PbnThD2a0Cq+5gWCvjRerD4Sj3M9QDyGPtF25T6LpUm9kg8OP8alQT2hCss9vkRRPubHiL6J9Yu+wmLNPnqOGz240z6/oaOkPqs4zz5QhxM/VJv+PYZrnj1WzSW8t5aSvdbskb6fpqk+XX7GPWLul734UpU+lbaGPWgaYr0AQZU7FvmNvfJn1T30/za7HaGovSh3+DzyepO8ppYnPT6l2Dx4VNG8Rzx2vcP6vr0ro5W7OF7mPE4KwL3n3xQ8QfO1vV+IeTzj1c09y3rsvH6nSLzZz0o9yU+ZvReBA76Hf829wliVvJ0/S7177a29cYWmvfEhx7xMdJs88cITvTzCHD0lnC09/r2XPFOlEz23i229hwE+vKR5HDx+RPE7oNyMPegxrj35/Fo9CndFvGPM5jvnElc9u9hwOxuZWzoK2I28wBZLPBC40zuko+i8dm+2PEi7gDy/bGS87kssPcybWrwRvQm6xyrXPKp/XDztOmM7sVcFPMRXCj2GGqs8NCejPP+jQzzL8Ss90DcqPbDEWbyIOAU95MpRPer1qzwcsSy9P9qKPBkT5bsNrp88BymOPMh91LzLcJE92YljPPxeE71Lc9S9xnHmPWhHsz1o0wy8H8/SvVrq77zomQk9AKWrvD5K5z2KjBc+IPAYPrJvFTzw94M8uJ61PbJu3r2gy++98gGQPlenJr3a6P+8423TPpqghLwimp0+2bESPPiHyr4ivg2+BUlovmOM5L08bJy+Q0I7Pnl7Nr+CCPo+4Qd6vrjjNb3A51C908rCvRbeGL+H4r0+9y7GvnwQoz7UgJ0+QNKVPl6vOD4i4xI9XYZbPRMzE75XOEK88lpBPVqnDb3Eu209Dae/vXeJ+T2v5f49nouXPIqECL4y1GC9mhf7vONTFr1B9wU+LeXGvanTJ77RBaO9vUfIPC9dvL3mwdu9AVbhuwc2iz1eHJ29UdTOvQ0nE7ttfXW86RDju6B8Ob1mAeu86+kwvRgmg73uj6i9FKQwvFmm67zW8Y28EvAevHbpmjwxLD66GLsSPJgEPr1ancS7oLAdPUZFnL1eMXY95oaBPAquZjygJP28LFJXO5z5pjvTayc8H45pO6EnUrxe1Gk8rqwBvAd3Ery/+Fo8LAoWvBtTebz+yOI7oQoJvDv6Cb2QqiE9OEcKu81SKj3OUM47ni3svBxw1zyjEce8j0dwPFq9oDyBJVK9emmRPABnWb3QcVC7jbVDvQuBij2+++W8cvJivGBKtDwfwXq8k/C6PcH9Ib1LoQS9CmMGvfFjmzx7InY9JZQavWDnVz37IdY9VgdBvSr76j1RdJm9hsqFvYHVFD1PZCA+U5MCvpcwFD2KQ2M9etfxO29w5L2v5AC+F2GOPi/mzLqVyqq6ZwDWPGEfMT7FQLI8A7SLvjvFnr4e0CM+3delvY/SuD5oZi2/FZ9uv+xTHb5CYhU/aY7rPkbunLwrfhA+0YGbPbAkY76Q8ow+BSS8vQ9Vc74wWEk9jf0gvt4BD7tBmsc9ef/EPZFDLj5mIfI7nWLruuHl9T11CTO4ERlnvRMNtz0GRyw9EYmCvZqXhj0OVMY7HyJMvKEk3T3eIwq+ueGCPaPcMztsmF09ELjAvI4Sfz0O2rS8j+U5vTrjoD0UOrG9ZNCHPU03ZL2gRVe9yHGEvU1d1DzDhrK61T9qvBEiUL3dqyW8u5hNPHrJ5bzo8km953V4PZJOND1eglY9BBfbvE0f5rwbSC09FIolvQGh17xf2TA8f125O02jvTyW7Ya7U3N1PMVPDz1CQTs8mSzAvNDYFLuYjOC8eQwCvBImsLt+U4I8Gv6WvMMPjbvO8gU8ALwsPJviEDxoD549Qel+u/NuZzz+aLE8yNMhvZKQ97w96hs9+58FvalgET2dIPM8G6DZu/cIfD2f+os80p41Ol9jkj378TA9eNnvvNZgzLyiSEa89xKovZuwd71yM7Q8oQEDPdJkOr6wuUK9RGL/PW0Rfr2OrK+8gF60vAthW7xxyZm9ENoGPXHMwz3mrrc9t7TVvU/unL0Qwr89/vEYPaTwND6rFoG9VzI5vRfIgb6y0ks+37JGvWK3aL3c7nO+ZIioPumayD1VXRq+7LgQv6JloD6uSJG9t0J1PvK1zb6jYT4/dWcSPhfdST+JN/c9zuvZvn2pGTkgOxK+APNwvtBzyD0VVEs+mlE3PJFMJz5RYps93N5iPdY3qroVKe485VwvPn9ciz5YIge+X5m9PQAIvrs+KKs8C8kDPPyyNb5srZG9kZzSPHHZ0b2ce9E9i1gHPlWkGj14uOk9jc2ivapwXr0wFuq8pRJSvfeeQD3Bxro9znB/PQiwIL0YNCy9dVK9PEUVj7uW5hW8qMSAvZi/FT0t5XM8UMqZPKhWVLs8AHi8s1NTu2Ac1jtkqQW9MyFevT2fNj05NSa9U8UIPa8qxrxCeSw7FoQ8u2CwLz0JE7Q84NguvbcyyjtQSm87FOhwvIOGirv4j707vSW0PPOwsbwvN6M8lWujvEp94rsTGD09itZsPLKKjL1yo0g9cMcNvQl967uGQTc8EGh5vYlouzrRTZs7j8DuvNb8wL2f22O9APCHPWxOzDzLG189nALNvM8cCjxJDgQ9gwRJPU0k2LwbA887cFcFPZZk2Tz4sjs94ysHPrAoLj4o4z+9H3tKvYO6sz1B+Mo9vNDYPVPZFL3swN69AHZQvvGl9jzyF028niTwPZdjTD1r3ik9L6yuOclxw7y58MO9zeGAvT4tXT4I90q+Q/I5PnbQkb7G2yC+c9BBPkCcJz0adGG+q13lPhpxb761Dbc9IuiYvUuaSD4IjtO+gm9XvmgLLD+k6UA/VUemPtiNqL5qAqe9HlSOPvFOlr4gPo2+GPC4vaDn7DxgETw+U6UuvtL6bz1CVim+E9Xqu41evj0uppq86m+hPF0Q8j0sJ+89hce1vExIN72YU7o93qKLPhxysL3fBCu9awy1vZrKxrwB9CC8WLicvWiziz3/C3U8JV8ivklTmz0ua/i8Va/QPPdMr70jiPk8cNpLvEeMbD23Vha91HESvAxg7b3L1VG6mPdQPWLFjDx1Wwa8TDlCvZdqbr1oDja9IDwVO/7K6j27TIA9JB1UPQq+OD3nmhi8KlA1PcelQjw99Bs9np2euUW5HTwlj2Y83KIcvQz5NrvzRXq8NT4NPKRxFbyjL868094yu6lIJz0rpp06ztAwvNDK+DyfQxc96UvTO1X+YD12vCu9Z5sJvb9PBj35hQu8rki3u4RiMbtUnIy9QnppvUWGZT1Zo5w8CJzwvKNDcL32YvU8xGSYPZbbhr1/2Gu9FTSfPB85rL061Go9Lu4GPubWwj30eoi9u5qmu+TZrLzyxk09DpPHPBH9yDz3yI086rfXPJG47zwc9Y09YNKZPchUyD1vEpS+fOumPZf7iz0kpps+nw1dvecEFb2Rjrs95BGJPvVZL76FEyu+LcgAPDdznL7Q44++QYlLvo4tjj7xoEG/cVq3vhN5GL9Bxwk9W8kdPcRcGr8ZpiY+nGLlPQEDl76dh2Q+I28Xv54j1j1+FFG+5y+QPScV/T1rGae8gDABvkBGwr0+W7s8WB+NvRoNOL6E1fw8eV09PhX0Pb39Lcg85asOPmPhMjzE/l88ttGRPZwjkr1BpO28KffevZ+tsDmzp/Y8AcicvaNegT1LRJo9BDeQvVBAQr0Tilq9qDiaPKaddrqqa8I7F7IUvWKzPz1fW8e8IqaiPQKcOz2wLU+9p+e3PJP4I72dHnW9soAQPdeBDb2HKCa9+7TfPLRaPjwLBxG9xuuvPDgoAz32YJU8zuQFvfl4J734ztK7JuS3PCv2qDx8O4e8QsaiPKVs5jvBS7k86GVxu6YIfTz1rLA81Q2NvOie/buxwKE5lec2PcoqNL2NzUQ9yHkQPVhQSj2eF/y6jnhfPBLzPz2FXgM9XzEYPLnnbL15Qzi9FH0cuwxhsDznS0w9yEDqPOhmPD03wJ68WI8POxbLrL1fYca9m+4jveoPOr2w+7i8QBZavMpnNz5UCDU9B/CpPQFOrDz1eeS8MgVqvSW2gb29gEm95m6APS+gFz4iIf+91LuWvdy+ZL3ZtSC+mdPBvICWob0A+ws+GW1nPinIizsu3729Yd0qvtvKdD4jewK+sCu4vVB0+D4Shra9g92WPsSiRT74gXa+dgFCP8PpRb4DT9u9MWDRvrNl4j6x1vo+ywMLvpV2HT2Taj2+NWrvvlyOGL5lJIu9XEuKPo6zl75GuCc+s4HZPO5xUr3Fvu29C1XSva/Fhb1T/pQ+7wSwvUOLjj4OAsO8IzRIPnGaCD5p/P68xCO3O/wfhz2snRU+NoXCPc+lK71TrEe9NY6PPR1bmj3FQjK9nHvbPXQnrz17rBg94Z8gvdv1mLtQUWa8tz+3PDlHjz1FhEW9HbEFvLudYzxOzIu9xgEqvfu1wLzr0/u7fpsQPL8eiz1+asC72yeuOpziUD30hg09XM99vAgcFL1WhS499HmtPBzX9bs+ISU7hAdwPfeVNDyr2AK9sud0O2k/ZbwiplQ9/2TEPDYLAr2fnao7XIQIvKtwSL32hqg7hrmYvLh6Qj2dV9a83dUbPRK6R7m6yYi9vpDQPdu3mT3P9Hm8h07wPOGKNLwBVPc8A2WjPf/FTr35fts7DViAPbts9L1o+KC9IQyXPW9QTL3hiN28VVszven4RLmXq9C6I/g9Pdx4B71B7Zm8pyJUPSSghz2Ixls82m8OPY3eAD6Cfg897o5CPpmC5rwlMdU8MyVAO6K4pr3ocw29xlpzvWF1Nz6EEAo9OU8HvjfDIT06h2a+hgyPvb4mU74zOYa+Tt+KvvUhyb37CIA+GGqyvQ64Sb4wzBK+NjLkvtCj2L2X5dS98KE8vcLAvr7lQAm/wW9Bv32rcj4igAi/56jmPjMUTL1PcqS+xRdfvo5y0T3Hfoe9G2gxPnnP7Ty6AJ0+XGkkPmzwobuRvk09e3PyvSZlLj1Nb6W8EV84PgjqcL3L+A4+Rv4hvogUrj2OHJi9+MyJvQ3tED1zSEi+h0ICvuynQr2FTGe9WQhCPcTihLwhGr89kWU6PZSRG72QDQa8Mu1IvJfghju+9EA97LEQvYKbwr2qO8E7m/OAPTQWND2u56w8mmzDPYn3kL0TmF+9DCiUvNq2jL3Xx3242i8tO/xt7jv4TwY9wmcXPOeZvjykwnU7tBu5u/dTCTzgsN68VUUcPfH7WjwZgsk8QtWSvMDJDT2uWu873RMNPdBB1rvs6kQ7MuyQvG5/Qb3GI9s8Gl/aPHpgFr3xPPE8LEITPfFaUDvY42E8XcI/PbTRqrmKFuk8oAyCvYmMZrz1wwA99vsKPX07bLyjUPO8Cp6xPP9z4rxaUwm9BcUhvaOWqDzhlFE9vDrgPB5sybx8i/w90crGPZyUHTwsNoy9kaWxvfJeCT0xO/E8OztBPsT5d70F+Z89/51ePezv4r1nfJy9A7kDvlO5wj6AiG4+COuYPCuc47ykqeM9jucgve95nj7GQN4+8GbpPYtW6z1E5RC+npJ2PmsNor4KeY68PH4Lv9p8oz5kiR8/ouAEPm6e1b7EXRG/pIO1vKhEHj/PvJe+BiuoPgam27w9z+G9MH6iu+HOCj7mrky8VhCePP5tGb2vhVk60VlVvHtpo7ySg5U8YTlIPQWoer0GgSa+2Ae5PP53zD3cORQ9Flw+ve9MNj4wOjc82k93vQoXJb6srr+9f4q1vVn+IL3zPaG9ACNAvpFcBT538Wg9kmZ5PFkzy71tG8i8JjcrPF+w6Dx3a8a83cgSPaQOz7xHQKk9DP0EvVqVEzw2olg9ELkjvYmqS7wLNkG9/crkOwESz7wDfOw75NazvOAzzjy8M7Y74zqpO4DuYTxuygS8yd2Hu+koDLxLNky8RiPfupevXDyA7wM9mGOaPCyTkb0v9Eg9GYpEvNrYBL2lOjY9Xtd6PLaPxLwoISg8tMcvvUiQU7taiCQ8C15KPF5JgbwryKE8xewAPLtiHT0CSB89cR/4OwSPiryDOhc8WQCZPEuoBz3dJBi84HVbPctNZL1slVo9S1P7vPU2gr2szee9XC9Cu1OADD18OYI9hLcuPbIrqjw5Bmm92KpyvcQ8u7x6k/S9EOmqPQm7ezy4woE9P1wJPqrmLD05Y4w9p6hCvls2Sb2HK4S+nL4Evm8cnL1cz5o8Idg/vR58qbw4cEU939UqO6bTKD4fT9s9SSPmvoLKKb5xwzs+8BQsvkcjIL4Hw+Y+TJ2ovu05sz3811o/QIAmvnZS+L6kcAw+QGzEPflzSrwyWyC9ZMWxvoGRoTsGncO995zdvk5MoLxPVh++WVEBv+pum73oKJy9o4DYPbziwj1eD1M+9f79PSqHH72Q6DQ9RuWPPoUNnTzqfte9w2kHPjLkCr6hsP853iaRvD4qIz77rpC9qJUNvHJVLD2sCjY9jaBhvGQ7T73lf1I8/LDYPSOaPT3z2Nq7itBivA6SmD0uKZS9kJeZPbh+rr3Q8I29GDTYvHi2h70xnx69GlNxvanCA7xYkAE9+HfouvKooLu18ec7EodRvIIcbDzMFuu8pObgPDhi9DxfQB09FHybuwdAizwKw4g7GdvxO2qsyLvhiho9WM2IvMCDlDy+plA97GVJvXRGobzQd9K7AkTWPDtnjjzB2YS8pyrNvB0AmrwWmlU9qgMSvTnfoL199hs9F6LJO0J0zzyVNzu9IDIdvNcejD3mHL48mQKuPVlhSD3xWaI86GlMvI0PSLuqP/U8F+i3O1o81T2+zyI9/Ed0PJJczL3NXTG9zanuvd1p+L0maBw+F/YfvVhtvzw5jfk9rRe1vJw1HLvFgVg9rYZDPm/SJT65zbI9DeOSu+Z/Mz2Q9aQ9PyxovY0mED3Hw12+IQx2Pay8nD2gxu6+8M40P+8S4b0giFc9+gUcPZg9wT7d940+BThAvgNqdb1MrTy/7M4lvknmQD70RaO+GJvNvh0PF738AU0+nOSxvhSbsD7j4qQ+Z4uGPqqvcz7rSx6+/F7OPajAKL5OTdQ8gfSgPX1qSr7foGq905P/PQ/YLT0PEOE9t9O3vaWbFj5cGY29n1cYPlSzn7106SS+ramCO9rcmLwvlSa9mjBdPcxep72Gs+G6drWbvCueSLzSG2O9q5o7PQxcDztsYoG56YY8PYpJvr2PlEk8BfN2vX3MBzlE2hs8sU4lPZvRADzTzgE9vzftPCGX9rw1kZG9As7bOw5PiLxEAWC7l6z1u6m97bu+pYK8lIW0uotYtLuogUW9CspNPF/Gv7zjfnC9g4gCvQ0p6jvT6JM8DH78ur6zn7vDkzA8HFFxuzvwEzyVhwY8R5R+POD6xzybubo8P8CAO0gzj71Esbc8tN4qvONI5Dw4sow9qD+7vCIuYLwg+Sk91r2BPPd7t7zrUcC9ZOzpvVPi5zxSKKc8AKpEPfLT3jxx+5U9G5IaPq+KOL3lLQO+n50MPVZu4T2TTmE74danvW8oDz121sU6d44Rvq5uHTw1jpS9F+povADhHT66Eka+3jmXPR0Y4b3r6/68djlmvrmrAD6UKO48ylxavplprD3qr949lJsNPe+0SD1y7sk9OpmAvg8+Rb4LnqC+zMMgv8oA3j4oy8m9szYuvgso2Tyw20G/ygVCPnv+kr50rna+iEU5PvgfFj1nTdw+oFoxPq+KA7/MYI48ROUIPuY2CD6SfRS9iJ5bvrHxPj4IYI8+MJVMPklCuDv1qdY7PAjkPGihzL0kFty9B/CgPTqrdz110Pe9H3PrPfSPzL3Pw6q8l3GMPVonBj7L3yS+5iIGvqgDo7yQbaI9YyMoO9mpwT3pEw49egsKPBNxqz0EXYo9lvSJvVcOhTvsIpw8bU0CvFliBr3Yd7Y81HSJPW0RrDzPB3I8npusPBqsibt9jyI7ntCluUzE4DvoPJa87Y3Zu9eDBbxpqwg86M64vJT3Cz2rch69WZp4Oy2uPzxrBYG8r50KveNrXjpjgwC9TG/uPCohab0vMMg8jnsTvfApVTx2QPK8c0jeuqeBMzyQHvO7/fqXvY/E/Lqps0q9DSloPQzE+bupzzi82FXpO+Lbrj0aLm+8TQ51vVdzizykZbg9ALBGPGY2rjz9i8e9tgjHPR6sWjzpK6a98ZvtvMz43jv+KNM7TyIOvdE1BT2LRC49gRLkvGU29j1xbkM+lXyPPHgOtjwc3P+9OOnJPSeB2z3IzyM9Oy3JvRq3Xb2dMLu7IjRXvFc1AD5CxoS87B89Pghbiz1C9Ww+oq8Tvo3ykr5WloE+qxe5vgqUZz5vLzw+iB1LP3dmiLzLoe49m0XCPRNhAj94dV4/g3L8vQq4zbz2QXO8iyxevhlahT538w88EPkYvRdNvL2NfRu98hKLPNAGXj7kHpc9ei/6vWiBbD5T9Ki8tPFZvZf7Kr5eUQE+L29KPDYG2z0iyBu+XLKnvn4QBjuPaTK+dM4evTCYt72aBRw+GdH/vcDjnr3mdJO8Ck5NPb+IaD3NmK09Xt+rPfscBj0XIy87/quHPQGOazxes409J1/Qt7cCWz3jOZq9afPjPNGUzLyUFAy9yv+SvUSiLz3gCYu9fia0u2z2LjsiFNq7/nuXPDg4iLxVUye5eRt5vMJoLb1/PoS7WuAGveCa6jzJpgU83BLZvOUUpLyn84m8AjCGO3+fKb37dxK9DU8bPSbGS7zRTKE7wz3XupVhVj3OxeO8vxwRPeC8Rr183Ak9t3clvb2/BrzdK7K5OrLRPSXLlb141Uy9nw6NvYAElLzMEcu8D/3OPOEq2b3ilBO6Z/lEvBD9m7x9IzA8n5ERPbxXSDx9CGe8f3qPPbqnab1w2fU7yhrRPIH6172kSAU9LgYDvpJbDT0cJWQ97dy+vdpGuT3VcEo+oOQJPpnlDb4knkq+TYVRPQNoU7yera0935kGPCutMT48tLW9O1igPQSQ874FA52+egSmPr9CxL608Ko9fGYKP6bjT77kSV08aHI5P8wN1z5xqpy+vD8IPBnHor2LTJK+DbJFPibzyT78AIC8Cd7MPthzhb4erRI+y+KfviSIZr2iW5I+zDpYvaNzeLxynpe+QoqMvYtTtzwua2I9q4zDvW+Wlb1wpqm9+TeWO8ZcJ77LBJq9ChTyOwd4yb3wbD88+5w2vSxR3Dukswq94+onvDa8oDvrOvc8sirtPX+Rvr3/Tq89WmHbvXktqTwXe487/ouzvAthDj7bYQk93kC1PHv0Ar1kdQQ9fhk9PBWvab3j5wK9u9X5vJJnAL2dLT89w8BMuI1LeDtcgSu8WPb5O+ezwbm7hAi8uaNbO5OVkbxtPlU92E+uu5YWpju3cfy6MY46vZeOfrzyYAK9xuIFPShmtrxetqe8mxyEvJBlsLz8A966DwhGvc1gEj3YH828ivIZO5+9I7xc4oA854I5PAAGBTpl17m9WF7ZutXF3zztZAo9diyvPDT9mz2Lw4+8qj8/PUNLpDu75py9NmUfvdbgF73NR7Q92witvS+zaj2+KLy8ksdtvVUUMb6E2eO9aIl0PZ/kDD4UYEa+0SD9PT1CcDwsrt48NKeXPeGbeL1Cwtk9LwHCvOOTkL3QHTy9puKqPBiODr7779C9u/v9vaJ0tz35JAI+lUSpPW82Bj4iSqA+FmAevny1Cz9RiIG+salqPoZk873EZUa+B8cBv2YzxrziNT4+yOerO9wY776Vx+y9lPy1PeTbbb3HF1q9XLB8v/4s3r66dg++y6c4vmvFZL6I1Pc92s9bvRZS3zxRZIc+FRd0PrbtqrvXySy9Nw/NPUGHvDqDKHU9HLoivnAt7L2Koxk+G8alvHo2mTx6TJs9qUIIPa53Sb1GSSG9gHxAPXCHxz1EAQ69VEMNPUgA+j3H/lM8VnpTvfjQcr3zR6m9IHaLPe+5dT0S37g8kndxPZdQ/TyJlE27Zeqwvd1gTr0+v6K7388VvW47ULyt8Wc5pk3qPDA/trx3kZy6FAmcvN+lMjyIEYw8FDx0PGJxcLreYtE7RX8ZvNQdGrtafaa8E8oLvYlrMzxwBX670n/lPJTAWrzSmK48Gir+u5iTb7wbThE91iosvFkObr0y4ga8Rc2nvIyh6bx/D1k9b90oOo7ALLs6pb08WX+PvAt8BzuW/OQ8WhYxPWOi2rxuiDM9NEUsvXyXVj1EAOA6eEdHPREY37uc5De9tk0Wu2taAT4ksP27M3V7PEUf+rxqAPY8LQBEvAd7vLyF7bS9ZMHTOwQZwb0HXA49AW0KvRG6+70hNtI8KtBkuw41CD6BImE+hcI7PStjDL1+dxm+lWM9PjVCZ76LsO08D2faPEyWUz6gbxi+d+8PvEg8Ij9YN9W+ADO4PkutQb6b1oU+QwnCvdrWez5g0PO+GfLBvq5SUT0qncO+PHb1vipMWr65lDY+IiDgvniKKz6BZfq9UWg+vrkzED5LwK4+4L1lPn9ZNr3YWO89Kb23vdJtgT7uyG69aK1HPZ7iKj4ZBmG8RZiVPnBfAj7+fxo9dYl1PeHG3T3LvYQ8uFX4ve+WK71Hp+k9szc3PXVbIDwLC7Q9SMHcPasT8D0303I8KNaJvas187z+KGu9QWoxPJYENDvWqZa9ZzW2O2IgpT16YNI8pYOqvRKlKro2LWw9pJhHuwfRcrtmYD48Ne+gOzRDPLr4jfG7wVpJvP3bxTspCE68hnaFvMBJMDtdn4i8SS8OPMcMRT1hVAk9LsYuPGddrrylWWY8DEr1PB60Hzu0t3+7awJavW1BxDxwN4A84qDJO0+DTLsqlbs7qvQsvGepMTou7zY9FTNuPYfYrLxwih89W1OjvKBr6j1/6Je8grtVvOZJ9jyOzIs9/IxUO9DNZb0UPsy8idEoPYsSTz1zRg6+m0K8vD1v2bz+gIs9HEiyvXbkLj2SXdm86D1uvYQvhzwEw7i7X/lzvc+3Pb031oo98ttuPZYQ+DvBXlO9w7koPnK29rwOxuM9k9ExPjcWlb24tzw+lTZEPqlLurw5ap+9esMuPgJwNL7Boj09WlIPv17p/r4KiOy+kOddPoRfKDz9CVK+zOqJPUu8wj6NyKQ+Co3NPQzPi7xp9YC+ZjHUvqCgoD4Hr1q++qI5vsliTDyZ0547dnXRPpd6xj7gTWi+HiCqvns9Xj3Frye9S6DIPSK1pT5Fce6813nKu1Gz/b1zUaW+HorGPmeTNL6wsUS9alqjPR2SCT2xsay9ONdRvRxkMD2OTdM982qePbndg7u8Sto9abXOPGCaub1z2/u9aHNyu+hWfz1qFrG8WmOLPRblnr2Xw9Y949dePaeQUry5tsu9hAqMvKLkNbziFhq7+o2yOhIORLyjI9M7BaWKvD02oTsGxZk7cZOmuwTLDDyKJTW8q8BbvE+o+LynoJ+8BpZHvFFbhjwRL2U8zHSLvKNbj7tFnQw9ObIfvF7HzzxSA1a8FAxSvQhYy7wkH1Q9NQGjPDg1IzxeLnu9OOwDPWM+kzxJoe09AlsSPe/GcDpvj7k9Q4A1vUwslbyK6n89caYQvZMeo7wGjz+9/4hNPeh5o71mTja6UoO/veQvNb1ChFW6nZmcvbapsrtz0QW+jDQYPaAIM711+9a8UCm0PFT4Y72cK329i2SrvX6fcrydzzU80zE0vT73OzumvfM8k/uoPZQZ2j3/LSA+3zq9PTXACD4/HxM+kliOvoGhQL5bpOa8sNqUvh54DTzJO5E89c8avUzRcr3dvhI+QZ3bveX1OL4WTK0+8UcQPk1Uyz6r+yS+KTU7vx+uYz5ctL4+a+8iPe9Gub39XBk/ENTFvvQaiz0ENwg9zz8hvz26Ur13z989qtXPPitimj0dXHE+OvZyPr05u71eaMg8UXMUPekBKz5fkCE9NGTTPRBJ5T0cjzy7UQ82vhnMvL06Tf28qBGePBhXOD5W/gq9E5UWPRaPK7wKstW8gpSxu7oRlz14Q5i97NkvPbhKQT2I9FS9Ydg+PN2O6jv6tIg8H56IvJNtbT3lyKI7md6pvN5VODzUkgs7MLjHuz3tqzsGlBy8bYR7PI1oTbtnAQk9jQJIvP4KIT3oA0I8Uo3PvGisb7yU4gi8qK30vKXKRT0giEa8G2GLOoicTzlEoDq82cHqvH6NGTt3Bwu940MZvBkw7DzTDXo7uFpXO4bZlTthUAu8hUQ0vQSW3To8nUs86v0SvOVbc7zARco9Jw8eu5fAlr3Zxhu8QrmwO3EXDbxcEhq87WhpvfiIFDv/0iU9flQ2PQTxoTwQWtM89HZpvVCpgj2mLjU9Ee55vXQHDb7nY488rJVXPcmkLjvm9re9LM03PjUmL71cNEm+onBxPWmT8j1O7eA9CItuvLyD2L3tDFc+Zpg5vYRSVr4hZPW9Wdb7vasVZ71yY749aOwsvln0vDwxLG6+Nf6JPn+wuD1lxPQ9Cs1WPe/raD4S436+8lzBPtZO/L51VyU/1zkkPy5s4r5vZry9fjmyvnE3aj6CTwe/8rnsvEf1PT1yUB89hOqiPg2VDr21nGQ7Nx2SveXbLb1Dhhg+rER8PhC+4b095hy+xrdsvvtdHL7z2j2+1KdAvt2zerxH4iG+uGjCPZvgnr16Vlc7qs5TvA1YLb2bXwg+Wfg5PRrhNbynB8s962kHPVxGuDyOiEc9WaxrvU5cqjwxsI88S7IePMBdX73FX9g8+cV2vKpMszt8W7q8JQuUvd1duroYYVe8tHzNO9NwaDxEGYK6nU6xvH2kkrsioj48DD8aPJ3Fez3gLzc7oPjCvO3ZAL1DYfO5KniQvKcoj7xpcUm8aD6aPdkC1LwaCwu9j3ECPRJu+zzXewi8b/x2O5UDBL2ymHi816TtO5lTEDrYUjU8U1jtPTbAHL0hBiU8QOGbPGO9pTtEFxC98oPiPPu9Sr12QAq9vcfNvH+MV71dWjY9tx+ZPen8TT3jdAA+JSZBvU9Ih71ekt28aj8gvZdAwTyvXt89rcDIvYdGLT0XRnM9PECqvFa8XbxEvQM+SumCPaYVar3yLBs+mBAQPT0OAr6Os7q8svU2O4Rw5byh/E6+7O12PV3rbrwIH6c+68ucvckKOD2Dupm9OjGqPSjpHT70d8e+pMIVP9psV72tV9s+vBUzPknlHL4dcwe/F3Miv5cAtb4b9km+KgfFvS3VBT+pari95kOLPa8pL76Cc7y9LyGcvr5r4T3lNC++tympPnrgAj0V3cg9XFi5vbQjdrvAFQU977JuvvwVPL4uOa6+8oGlPDUdwj3t15G+x4m5vWOB6D3f3j09viOHPAWSH72DUKm8yKT1PEmKS72nHkG96TUUPWKkhzxpFia95KEivHGpkj3PK809dJhdPVDmljk2REk6/PlEPWtrATz1+lw92MQLuuTyCr0ZEg69ExkcOnIVuztxc6q7DwirPB2isbwiSaw8+HASPQXZ/bx7ZMC8P8WwOiY/ibxZvNO8PbjFvCjpn7w225U8JGHjO2bc+rmI0BO8+1KVuWlSGz3oodO7T1gaPBkLAL07IlE9yYSAvWRfELryeEo9h40avGy7szwopDc9pITdvOLB7DtDBjm9cV6yu2UXRzyBMUY9hE/RPNDbiD33H6S8O6uqPZz5JzzIrYW85kWHvKwXfrsayw69OCG6O3PtszyXSjE9ZWwXPbYbjblVbBw9LPClOlpExbwZXgK+BmuMPTwtZD3AF8k9++OMPW5ufjzGqII8EpcSvTr7fbwSuYu9748bPcqxAL0T8Vm9SiJFPIkwSD2jXpO9YOrtPJKesz0Q8KQ9Uv6iPotLU77yaqM9dS03PCr6cr4Qqj0+wo5/Ppwhv74oGzU/gVp2vcwYND8UMJ48CbakPmo1Lb/Xgws9pz7MPZz8Dj7PWpG+Nb+bPgtWvj3F7G49kY/VvZNgv7697QO+j3XhPkkAAL7SWtG9amOUPcxmFT56XG2+KPQ/Pulktr3To449i0vgvboOmTyz1xW8TPWBPaYvGD18d8y9zNMvvbgzCT2nxlu8ncquPDdczDxEo0a9P3OrvUD0lT3iVfQ84DIOPUEv7z2Dtrw9EhgEvRdoiL05fko9YVYOPBb4vry7m7e7XQCOumNVMrw9S0Q8L1VivN7wrLsgYYc8n/61vHqfI7pwb2i8qRhUPVnj/Dt4OV28sWkSvd0I0Tzac8+8+h3KOyQnH7zq2gE9YcjCvCxNUry6tRq81ZWMPJIjZj3g8xy96nj/vOlPTT1ImKc8HnIvPd9hEbxbuYq8Je2wvMKTfj2B2aC8XgvGvMg4QT0Soi04xbmePEcMYjxv+r+86ZqfPGBDqT06jpE9pu4nPEc3tb2vRts894WQO8k3i7x6FXQ90MJBvcBLvjyJVOW9C1ZEO3TaBLy4XmK8inI8vernu734o5g90dBrvUieYrxpNs29UScvvSw1ID5G09S9OUWPPZlkKj5zy4C+1KxwPWPr9Tz98Ja69HUBvsQSrj34VNq+ta+NPk/+oT1PDgc++lY3vXkGPb4xh2k+SHibPSTFlj2bHT+/O5KjPrfA974BlBW/IHTDPsDhjL6JczE+crCWvgwxAL+t/nQ+aqmyPacVnTzpqR09Uw/UvH1u272c1Sc9cMsePgW4Pr4GcO+9V2RJvhg8K76JTf09YBlsvgiyQTx7EEG+B0VQPmWMKT7LgMw9so8FPvYYjLyynX0936wSPqV3BzxH2Js8pldnvEu49r1ogbS8kr77PUHrijpzT6U9fVqVvD3gobwknli9oLmuvXrcE716CBa9tpRmPbvECbyd99o7oSGEvH4LNrxJr1C8kXlJu7QKuLuRKUU8uSnPPC01kjmyh2O8q3SNPS0nvTzDfD28AHsIvIP9Pj07Nos8IcIdu/KKIj3k9RC9msWKO/02NrxKf0U8alXBvOzIBb1i6KY6gjiiOqLvyTwsIoG9jBoBvG9UxTwx08s8cGCIPdT4gzqzAMI8NoTRu+ISaD2t7m+9hVUzPH1WvrwWu5C9tpnPvHdNNryYUwO9k0UovEsJgj2JQp49pMwmu5hzyT2xWby7OIKUPTQf2b1M1D48b8pqvK9WSD3fMDI9OJXcPa104bzizoi8d2olvYVLab22Sya862ozPla4OTu6Yaw9DOfuu63VrT3RrBY918XNvWX/kD6GOVW+NjPIuhJyibyb0yy+bY+NPTlSpr3W1MG8oHsXv1l3ezzxwAC/YaB7Pjk6E766PxM+fNohvaTXzr01Fvw+yUM3PrpTYb/SDRk+6+Q5P33lFj78QjM+nlboPRO9Dr6PmN69VXIfPh/ZED4bmPm9PDxsPFIK7LtQmLw8nNwHvoA0gL1TzVK9PGBIPb767z0tluU8CvnMuzWsgLx2/LQ94WHUO5ZO0D3Bwx298AAAvcaEHD46XbE80anvvVWS1z0cjdc9rG7iPKc0lLxfY7w85LVXuoCDObxQnRq9J8CHvefx1LtnT3c9p1A9uzhISjxdGTy8f0yuO5bQkDsSUKW8e2tQPPjhWLxAbOM8FiDpPIay+zqJHoA8roEHvAvASrsgcIe7Qh8CvTbd7bvqcuU7DrVPvaCl7TyTrlM8w5YPvGwKFb3Ky8i8TkkAPas31jz2G/g7BwN3PW26fjs+4Fk8xVUYPYJC5bvbI/K5FWxrPa9jAz3p2Ie99mHePDpMtLx0YKc8HHacvGrc9LwFmeM8f/rhvDrtPbzE3a27uJpCPT+/gT2QYEq9hi+ZvPhlYr0BtfQ86cBjPIDKYb1IRAM+K3SKvEc0cj27JqM9GqM8vYcTFL71Uoq9FQq3Pf1JgLyq4Cg8qmfiPYe7wb0uqso983+1PYwFg72yEwO90evDPRIJoD2m/JS+XhKRPC/dIb2j7m8+URqGPirPEj6mrJU9brasvZTaPL4jEA6/qCKIvnMxhz5UMAE/eCS+vn7LUT09vws/6dQcP0RPXz43+d0+LfAvP8WZ3TrFvHe+Hs4Pvje/K77CF9u9MWG1O+zwPj7+kSI9805IPdSaFz6hUBq97GQ/PXg0qz1mTZC8qV4avkMVubtxrwW+4jAGPjE2l72Oz+a83EO8PUJYIj69KeU7pcOpvG1ZwDy1YBk92hasvWnutjwgz9m7A4VfvaAzAL2pagg8SJSrPX+xpbyOcg+9iJ6PvLwnQD0KLFQ70hQEvG7TVLyMLTk7Ufi8O8Zqu7xdjNw8tYIiutaOqjyHPoO7dAv/O+JsYzt2Wng7vuWHu/rY27sQZ9u80J6iPMl2K7waQn08R+Y+PSTT2DzHkOW8ZahSvKCgBjz2FK08OInTu6IDGD2cHIU8l3HhvEMsXj2Om7K8VshuPUHyor16O5M8hjq0PAA6cbwzURO7iejYOofvMrvkdQc9ErIOPHLmybz79K89M3gSPESZfb1/G1a9QOZuvTWJrT3JGR89gvu6O8V1yTs8Twc+xKYtveDvEb1Lusg9Ehz9PaNYij1q+O09jd3jPUFLHbxIGN88eLaHO8naz7znf6Y9JjKRvXzHpj3wkic9fVgNPTByKD6yQhS+7xe7PVkOe70lxBK9RS+3PSJlJL5ulZy+r+u3vhmbor0He4O+1K7rPjjl0j1MTIS+6HF8vZNZPz8a4Sc+ebONPA5fVr7Uc+m+ydMHv9yB5rxM7do+bgGqva9DHT0Ed4W+7x1jvsDCqr6rkSK+Bu2rPokEs77mGia+FSQPvro0DjzViQu+YfcMvifcgL3Db+k9wQjcvBfCQL62Uq89DjuBvrTS8r0CrFG8GPVDPL102bxXfKK7x2fdO0mxwLzPXre9F4VfPPU/jjy7aee8xjt+vLhImz29BBM8QzfqPPLnhz1gw4s9+3cTvYPS4LlHzjC8CNOMO+tZbTxBnUG8TSZYuvcNbLwPrV08wN+4OpYdqzw+AEk7dPMIvYzdiDuDlCY8q9j3PMQP7zpObJQ8ZEnrO/xRHj279VE8IfiNPJlw0zm4lge9X1rWPDN8Xb0zh2I811lpvWqJHj0f8T48vjiMPK52Mbya7Q49uXYZvaj8hju4Ma+7gWAGve2uqLx63sa8cpzFPPQYlb2nwTW9ii2Bvc7srL0TA/w9cPeKPPXJ67vf3vm9vYFsvaX2hzxpyXC7oM9qO86jYj3AyL67XCEOvWsDTT6LFYC9Ot/uvWD1ED0n1s89+nhzPZMoqr37e5I90UNxPTXb+j2QusG8LX6tvTq7Er5HYUQ+WlRiPbt1n76Iet+7kdxuvaA0zbwU2M+8Id1tPnTmgb5YKF+9aa/tPZ67Hz8EanY7Iy2Xvadj3j6bMxa/2SxMvi+S4L2ACJg+yRe/PrD0Xr453JS9xfOUvgr3vz7xVMA70PsKvTymET4hlie+HQmWvH/E+D2cWRs+aqoVvv2Nqj73nQ0/e66/vtMbQD71DxK9VhS0PaN4XL706rY9FqLBvUt9djz0Hi6+RHd6vfczLj4GK9+9V0UdPlrnAz65QKA9uvg3PrcPAj2wlJw8g7GGvSFQSL2gwxG9vGVEPdewNTy3DoU8gFARPk0HtT3f+4i9vWmFuytJr7tr4XO7/paSPC98WLyWDem8NR6ju1XOF73Q0fu7h2Q2vJObTj3E96a8WRaUuw/TAr3yYhG8jyp+O7VHmrvBVBm8JzhyO1qQ/bz/dhC8p/SlOZkLDD21WeM76nH4ujjoUbwngrK8Uv0RPDQsA7zd81S8VMA8vcvTYr2FAJE8T3rVPL1Idz110aa8mth4PPfXm73RdTO9/N4EPSwzgL3FbPs9zT4OvXsrcL31Wb88yAffvKRMYz1AcEo8K5USvWM0rrwIm029O/mAPZcx0jxPS469eS6PPA9EHT0T7pk9FdECPG5f7jy3KCy9nrAPvJ75qj1wcUc+6xDSvRpbrD0qYp4909jWPbRbhjo+lB49wyvKPS6por0jXnS9FouiPm4fdz7vXUm+2z4VvsyfnL5cp6+++WlnvgTHDj5MBvk8rvpXvbOBi75wDSi+Ce/gvbXkJb7Ggd0+fOBwvvXZTz/LuBW/N6icPsLGr74E/Ti+bVqFvaW0sD5QR629zLmivFbZMb6HZa49aXnMvowEVr5SxxU9j6DLvAvXuT1DYfK8lag0vUNBuD1qfQ++IUNgPsoIjTxNyCy+9oRcPly/qj02zUW81HQCvQTxRjzKqLA96aI+PLPGcz2K6II9mAiDvXXTSL1yTw6+70IQvdWRP72URnq9uRT9vFdSRT0UxEQ5+kK4uuPSVryWk7u7zCy0O9hNPrvBL/c7xipPPAyNx7v76xU86taEOcpxaTkHe9C76Ff9vPrbGzzPZfW8ycHcPASHTb2P1Qc90UunvHFpwbtA+q28KaYpO5rrIDya4QI71EL9PHDAir11czw9J6KavYR/l7sGg2G8raLgOhBhBz05rue8GsGiPJVeVryZdoG8K8wavcgfDjwL44c8OmgtvRsE5Lxxeg48RuTxvI4ZhTya/Ye8gOgsvWwDzL3WGYc8cJzQuKz00LsouM49ymfOvfpnsL27Zgc+gd8oPH1dWr2eSCI+B8A6vNSW872hHvc83nQdvE8JDD43Y1Y9qdWKPNny3LyLByC9NlD8vcnVpL1dtn49ho2WvURZPL4Oowk+O5Dqvd6sor3wavA8BhJSvl8HPz6ouWY+EdMsvjfhB7+UE4y++dc6Poq6hr3w69U9qK3ZvYzpb7/7TLq+iqsMP8bVA73CrHa4qyCqPkMTlL7WewM+R/MAvmI3/73RReG+hi0oPlxUPj2Jy3s9SbudPrNkaD01a5I+wQdzPgbjRrxkR5i8NukHPViXI75T1W88mv9wvTJNCr10kNO8g2jpvXm1ALpsvoQ87SPMu2EEkD3giIu7YVvvOyfFBj1GQ2e+I0R3PEc4fztMrfY9yY+7vbzHs7x7qCQ9YhKQvFYSc7sgY3C88+iMvOizijy4lfC6Z6CnvBKLlLw6qm07aKjavOMa7jw7cue8kp0iPTWslrzZWxe8uhwfO1JCzjycaQq8SJiTu0M+ortz7oM8QnraOzH64bwRffi8EbEYu6J+WjyM+Iw6ekffvE7nhT3Zmra74J6CPEbPjrxnVHE93dnPOa1V9DvJlOk84GBCPYXzwLtO7oq8300evUPUjTs2jSi9nMQIveM0Gz11eRa9D5aJvHtagrzCLSS8yKC5umdUsDqTVGY8I2BEvfai+j0chAM9Q2//vAtIhLyvMMw8btD8vDq8tD2SVSC8oL+KvSfQOz1c/SA7HhUcvY+3Zr2rbLo9YqNrPG7QlD2G9oG9BVY7PpH+nr3cOeg9MP28PEd+Jj5AOqc7Tb47vrvllT4EwO09U8gbvUfru7y6I98+BMWtvXFaXT5Z8tw9UL/bvDkTDz50g2g+RPcIvSVar7xCpiM+ZhDNPFzGDT8vc4+9dvlGPw5q8j6cetm+yIRhPsqmmL4Fza2+3kFlvueTorzOkhY8e3YbPhT1uj6NKn4+HrGrvR+uBTuYOci8UKdxPq4t1713CrA+P85zO2uaQzsRS4o+KUGavccu2r15h4Y9gUMUvsNjRj7aq9I9vvIgvQQh6z0Ppcm9X3uePSltYb1I+LC7pqaWu5+rrTvbVzC9c1OLuyBv8jkAYVK8Gwg6vG9ioLoX3aI8A0vyvP8Jx7wqTUm8w8tKvWNLirzojuw8auaVPJwUWTzaVGy7I/XGvJ2pjbyug4O8RL9TOzAHiTwksJe8cn4DvXhpXjsRl788/MAEPA7W7jxkAA09HDwAPMWNET3/Fy88ceSdvMbWejzf5rE7S5qmO/OVHTxy9yo9VZAcuhP2Ez3kq8c8IPjPu0NP3jpWVXC7HZFvPFGNCL1NvyM99HERPf2/QD1KjpS8BilzPaDGtbySoMY8BUSKvT1Gzr2Twye9W1ahvT6jH71pUOK8fXw9PST417znTz+9K4aDve58sTnimpU8hL8dPePAJTytJgC9yrQ1PB0cpT0Aj22+j99SPt0wJj38uiG764cJPrIHgD3AYe09vbTYvTwDoL5wdN496Z5ePmqbTb7CDI49+swJPl+LXj6Ivbo9PyEwvZc7TL7PIiM+fl/Vvalvt74CHvw7egmWPiQnQ75H2My+HhatPlx81T52rUU/XZ89vwLfYb5EDY++iXsWPjLbN77dFUO8kcmVveGek71jShi+ZoiIvSi9yj49G/m8hKcZvmRirL26a9o9S/0fvgFFAj0412O9o8wJvG0V871ON/e9lWUPvke/ib3iaZi8zN6tPduP673x7rm8AhoRPKCs+7yIAUO96lToPdsNeD2lbiq7qAjhOq8HM7nAhoi8kT9CPHMJV7y/rng77EqQvLSBx7hvi6A7ERmbvIkW4Tw2Xbi6+lSHOqOkH73qSZi8vQtqPOI6kTwkIcC8aBHcO3c1mDxeDF88jYslPAK7tbxwblG8iQHkPB320jsn0768jGoCPTh3FT1C6qW85yPavMrX7TvUeQe9LSWgPG2QGD2DrUC9WFvtvDbMFT06ZTu9VMzzPNfR9LwfkS89P86JPZgZbbxAnXi8d91avNvbM7zNAuK7fLc9vZGrSD3oAyo95QiavMRYhr0maZo9oObMPbxbQz2APKa8S3BlO63tFD0t8Bc8aKc0va2gnr0jc/89mWvNOnb6Nb0s3Jm9Li3SPW1m4by714E7Dm0oPhmDH71ep4m9FhM3vW7qpD1TMFQ9yw4wvRcP2L1DR2o+nGYJvHQ+qT5pWTM9vxorPjoA6LzzsCI9k3x9PnMA+D53Vsw9ypWlPc4NY74B8G08SE8hPxamPT73ZAw/xMYxuyfmor6IWri+hKSePreYyj4laI6+oT8fvpnEDD9lSca9a9uyvJRFDD2VMbM+lyCHPccVZb5eczU+GpwxvsSPGz5yCAS+xWWCvnLmyz3FjaQ8yryZvuQxlj1GaaG8WGpTvSrDmD4jkDe+Jktxu6LqWz4t+Ek85b2YOu4h57wATyo9TdWYvQG85TlGq7g7ygQ3ORzU97p9KSY8RHyfO4S537pqUKU7T/OzvFrL1jvGK1W7tF1CvCnXjTxoBJM8UP4vvORaAL3tSS66b98ZvesVobxKKT29XsCcPBuBC72ciCg9PeldPI6HUDxD7ce7T2gFvAB7fbwVBL276G22PKQP0jk0rGG80B1cvF1GWD1C0va8lMy4PF1cnzw4Tq08aLVgvV9u3rw9uYE8zSlNvJqO/DwCWGK8OXMcvRFa+LmDF7C6Z5EuvY+Jy7vt0YE89vAJPfomsD2hokC9zNMEPMLfr7xmALA9Pz9MPPfOLL2QTc68v2dBvXJrvz1Z+sq8zlMqPB0lrD0qEAi9kbvVPbqAhb2Tczy+f7gWvbHDDT5ZgjA9gen2PByOkD7XyfE9aCLxvS9+IL7kbp49QymXvfpSnr67yby8/3wwvvVvmD0A6ti9wNKlPo3LCT64i5c+1+h8vq9FKj3UjcW9CXxNvsrCjz4HC/k+5eUMv7WsNz8XNiw+r782vZ7zKj9Sqb6+UsS1vV6niD7vexq+negLvkBc3r1tc2y+d1v4vORs9D2xjSu+jJ3YPXytyj1J2Zo+gmj5PX11J72EKiI9xvMDPrGMyT04gmu9pesZvTQhprrQBBu8TTlrPR04ojzFWqE9+D6YPTZTLL2Qp8M7jSmlPDL5czz9+ig96N2buzFz0jtFWqK6wUHGOqTjU73SrVm8B6mtu7qEyzzFuwq8Q96WvOcJtzzWZKA8kqDAvL0u9buaQxA8FFA9PIfwkTy3ERK9INg9Pf7wwjsdIzM8Qbt/PdBJUL29aKO8GFovvRYu6Dwu9Uw7p8ekOx6HNz1G6QU9pAWsvP/0oTxyCrs8Qck+vKYcRD0RCEg81QNcPcj7/DzPUlk9ZeLju9h1IT3wwl89PQGjvEysaj3Egu87GGozPANJSr3aTQ89fCYUvbLEd72fsRK9Ro08vYggjjxlrjm8sLlzvKiGnbxsc1q5+go+O9QubD3C1wY9bimQPHDAjLxG6hW9HDPvPUiw8rvAqqw9qe/PPe+K2jqlsoK+wbqEPR2Fqb2rvvu8a0TpvOA2+byG8fy8nBUqPfFZ7DykJw2+tQNfPbvbmr0ivWC+eYS0PewNQ77xAlk+1mBJvjT5jjyodDE97JIbvm2sFrtB2t2+mQxhvhW00z0YMV++jtWFvhFwWr93GPk+JpWNPSHRi77G99k9K/5ivS/khr0/VRo/pxE0vUcSl75fBDe+Ztzcvv0TGb7BIT4+WgzyPU/8vb5m8Z89cFBWvl3QXz7YhAq+T9XhPWPx/b3Zc6o8YVHIPaWZ+j2CC/I9oU/NvL54cz1EU309XpkGvfjsM71+rVW87nLlPFGfnrzZVT+7UlG4u7pGHzxKp0w8JL1Bu4l0ibsi3/c65UzIu4Xc3LwrjnI9gcSkPHD0qLrNlcg7couRu7bpJTs84y69/T61PAVTwzqKISi9jLtUPCEhQLwNgRG84mZvvGzB1rvBFAy9dIiRPIRrWL2NxtO8PbYuvT8EEz0Va3q8cVBqPbnpybwtny67SjCwvAnfwDvwH5m8Q+JivRa+sTzApE07rKS5vCBlPr3ypSQ9UeK1PF7E/Dx7QZq9VHnFvCBeeb3FbBG9AQoTPUmo6b0AaZw9eBuJPfYwgr1xf4O8VPnAPRj6/70zqtU9cD3qO7M0cDxTob46HG2xPCcmLj38nd092q35vQt9nDkybAU9JLPcuo7BLj7lBc+94RA2vAdcej1wgaA9EDcHvu1jQ70xUOw9i9odu1J90z1e3es93KiwPrF4kTyeyhu+H2Wavnpihz3xUni+UvSGvtRdbT6wgkY8svhEPvHaFD3wMia9L33uPgpxC74wAN++AZGLvZwmCr53w82+QBbevvCHkz165Kc+l1zPvm96tL5GC1M+BtWovinp6z4DDZ0+5bsAPp4smDuZt0e+ZQifPUp/yj4CwYA8i/l1vJKUJz1XIMo9+s/0vZ4kYr6VBRo+awRjPr7y8r3G/vI8oUmGPlX//j2ZsBY9VUEdPlDEGb5HceE6oneMvRVYbDtVfpw6eAoou91p17w0ZiM8m7osPFmUBLzwWCC7oZfePFfcgLyDd7+8gMlNPL7FDjwxso48wQy4POQp1rv9PK682f2HPANnBT1tBpe7hjTgvF8/Hz15t3c8zneSPH8bl7mdlSQ8gXHXvLO6B7v6P2y6+HI1POYxs7yktAk9o7CUPBbwjTxcZ8Q7SGW1u1hKQ7yF+bG8p9taPMinxLzeQiG9yLRtvDv6SL3adBO9WTHSvGrFMz2H1sc6HLdNO2rCNT13bEo85XP7PDvOmrxJ1549JqlGuqmWLz3gc8O8LLOMPSQFu71iGa68wgwwPRbjEzqYc2a9H671Pd/yD75x1HA9zuQEOF+uGD2j1mE9N8XevLyYDD64Dn69J5A1uzikkT0OZi+9xG4AvlL/UzwfXhW9vns4vcHMY74em+q9JQuDPV+1OLvsOMg84Ld/Ozi5pDzWhvA8aCq3PR9OhD2FVLk9pZIyvuO/gL4cvw2/4SSlvr3nrD5T/E+/Nr2nPCwdYr7yoxo/yeewPKIxgj423VC+j4t5voReYr5diwe948j9PSvcKj7+UKw9RC2yvnCqjL613wU/pqmAPr9MLj4lODg94laUPheNFrz7uQ09jkhJPHI7Ij4wG3m9+uUfPVBOYT3GFc09h1VxPeCE7byDGha+rNfBPGdPzLx1J7C9huiHOkAUEDjKpOI7A+q+u+VaNT3R95089IQ1O3+dcLxxriA8WE+oPF9Eljzdb028pUGmvDaeWjtpCd+6iw+ivCAh4DuLEQ09iHX9vDzhC73/aF68rZicO0uiEr3MlHM8Rh1CvZJDtTzQAIq81ZYlvdxgSrwSXde7DXDqvPWmB7z4Sm+9rj0Bve1iT73wufk8M8dHvK1CNj0tPw+8A9zLPN3uOjyeZgC9EzEcvKa8uD3dvYE9c6EaPfmz9LzdDYW99vkZO7QrwD1cFrC9hbfrvCGWUT38dWi9MKPDPJ8GIDwokBM8FcECvfKEGL2+Lne9DLcHvBwNEzxC34S9mdvZPey2FjxWb+w8BIC9PcG+Jz6abLI9K3+avaN8a71yJN69rtlgPcNOPb1QpHI9/qgXPQiPwr1bqxa89ffHveC93D0U9yE+HqdsvuynIr4C+la5BcxGPNuj8b3lb+S9VrHivAR55T4GwCk+dZLePS1b2z2A+Ms+p27/PdRb7T1M5dW8aK05vsNOTT7AD3U+oh8ZP+GZmL01kDm+VitCv18MuL7JaBS/G275vl1WnT2/eMM+tIydPTsDwL1O6js9CMc0vMSe0bw8UgI+lYWGvstpFL5od247tFKuvV6WUDxVZv28GJgovNbSTzyXfGG8kbQCvrDiHL0/QtA8o/CYvYHgdr28eic7sbPwO/NTI7wAcH68HWOJPORDaDux8Je7oyrwOzNFnDze2Qw8ulc/vAKObDurlws8eNO/u8dmBLxDPzQ9gg+DvDB3orzYLZc8OrGAO2p5N71XNaK8os3WOiOWBryvZ7o8Ju0IvJr3u7vGMc88x+BrPAI/hDxXVoE8zWKrPIatyzushek8W1sZPQJ8kjzBIzM9fkNwPPJkRzzIYzI9iC6mvHhCLzow+ES9cKcmPJftt7xpTtE8TB1wPF/gmDxQ5wU99i+GO2hv5bxrNrc8oCTIvJbJvLoB12+9ufjhvGi3+TxlOka9qs6oPWzQjT3veDW9MFnavDMMCL5+//u9X3zCPfN4fTzUapK9XsDnvA+l3DyUiso8cXxDPZvsiL1NJr28ruazPLF1mzxWs6W9ofgoPvnmm7wd6AE+BdE7vAH8BL5RXMI9AiE8PhX0rj6ioCA+Ri+nPeiIO74ywUW9O1mxPWpz0b4AF2Y+j/uOPbPshT4MwL++OaLQPvmREz/3tu49QwXpPmiNWD4ap38+zDAHPpZYUT7UCtq+cl0yPlHgRT/84rA9wLShPR5IXT0qjH0+8PRSPihxjT22YTs92pCwPeo2D7xPfae82PegvQyyg70y4X8+FitbPjI3IL5zX8M8duEYPuJcDz7HTdq91Pohvog2mDzitYW9huaIvZMcsTvq3++7Fvu7O2Y8ETz9A1w8PfcTO4tjZLvO8sy8hcmju6ofhzyGEky8wbySvNBO9brii8686aj0u99av7sH70c7ThR6PflBf7yS6/A7mZDIu39pTb010yY9nnJ5vT55WDz5Hd88GvO9vJ6ePDtJjFG9pIAXvSkFhrpbv365yPHtvLnkkD22zBU9eTbXukwlbLwUriq8wjg7vI3QAT0MHrK85CVJvML/Lz2zHBw9tvAMPT4j6jzzmjG9QlovvU9h2TzkwIU92atgO/TTkz3oTNC8iX3LO5LCPz3lWuI8JIW6vJgTgD1dmaU8xASsu9fBRD0j0zq9nwu9vfehzj0L2Ym96CJfvRKT570AOQu+JbbZPKRYOb36pNE8p5CevdqoTD3GEWu9qD0svQFbUT0kjKg9Zc2zPfNHA71glro9m4FDPrjqpr0Y0V++DeEnPSw6TL4dKWY94jbrvRFTUD4bD74+qvlHPcudpr2F23c+BLqEPuemsL1+RlG9hcNuP1XgjT4hirM+19zavmh2t77ar5G+YiXlvqSNQj5+jQO+3F9EvrfEQT5AQFK+/gudvpApmTzjRvW9YfRdvc3xF75wsIO+NR03Pjb9pr1oh9u8FAf+PaARRr6+YSK+obxiPqUtTb6I7x29iToYPn4OGD6e3w+9aEiwvUZpPj1Qiv48UNK+O+t08Tp8u+K7xt90PARKe7pw2za8ImSAPO8qDjr+7/O7S+/iPNFfo7w/r5m8wz4KvZhn3btkfsY7IttLO+6ZHbu/6Ie8jmOevMsHjr38sRe771PRvHKPSTzQRWQ7YQsavIk3AD0OTm89lGwyvDURK7wy4cy7rkInPbiiR71x7po9TucuvMadzTyPdFM9W3eiPCCuJDprt489b06Fvb2X7zypNQI9LrIBPNWyhbrWLFG8p6IFPYmG1DzOnOE60uxGPI+XdzzNSwm7vL6lvB1VxzwU0C08wNchvDyEXL2VfSQ9e86QvSqq5zy/efq7oVyMPJRCQL2sCJu8j/0xvZPlbb0jxwq9AKU5vWgzS70zoAO9cwvgus4Slz0/Yb48c5DgPcph1jz5wi29K+kXPrLfCD6PPZY9y9RavcyPDz5ccI+8UUsuvuqzvT27lGG9oAgFvpwk2rzs8qe9OQ2cPZX7Qz674gk+3vcBvpyJNb4/yl09pgqEPYdbl73WJ069iE6UPSEex75oATC/2Iz6vSiXAD/7F6c+++Plvsj5qr5cBr8+XvWWPmblAT+eEJw9m6itvaD7sL6U5Tg+fzuMPkwy3zxatuk+v75gPbHJkL1yknA+yZFdvN64/71iIxk+mKdVvvIgHb6W6EY9P6GKvs4NgL2IbsY9Vy8gvUXzCz1SIIm7xX0wPPPF9Lvk2pW8frVTu4cwiLsEa/G786qXu/87U7xZdVU8RQkSPDHd2jvDGj68dCD6OjEugLyeKSC9dP9ru30JTTpMJnC8QDKKu9EgBL0EqFA99aBHuxa0BLz66iy897PKvFUyhDzFkOc84lkWPf4Dizy9QHO8+GyePAaM4TwY5yI8QMD+PO6auburt8o8jjgdPKXWKT1Fq9u8RPfLPcamVT04QxM97AmtvNfQYL3dxYm8QOriO4ijRTwZKjM8yDaMPVbtJT1sKcc7xNFWPJMVPTzILfs8KfLIPFC3NL2VQ6a9PQrKvIqiBT4N7nC9OpPMPBsYaD27/0k9QWHmu0vtVTx2Zsy8AAD9vTVWgD1QyZO8RagxvXuDnb26CE86I4JOvbM4rr2DjA+9Ur4KvVNnEb2w5Cy9NrIHPqeiZr4t7YO9hC6hPpnzxL2zxE+9J9UNPFGmqr2R4Um9/fSQvuEvK75EDFU+fnHxvlf9WD4xPce9aJ0zPBR9Nz5O/vO7jo7avuf3TT8vYdS8bhbIPrCTAL/EfJ+8dOg/vuqajb7MjeA+2eZ8vlp7Fr7hcw8+Yd+FvvZpnD66vMe8tJu4vTaESj44UNI80KI8vr75pLxVaWA+zV5Cvr4CoD5DeEy+WvSMPMG4BD7gQbm8XuWIvd5oWb176FA8qNZJPYojGLwaVj28KJoHu7VVHjxIzZu80JR7PODXBr2kApQ7BoqOO52wEzz9+i+8M3dePI+9WDxwyGc5dueAPBPA9btAWoU9frM/vFN1yjvymxk8HBQKOgWTqbyv0eQ7zGDePOwm5zw2/Bm8l3pYPNOWOLzVT5C7CTl4PF6cUzvrzUq8V+4PvT9Cg71j6EO8emGDvLvkBTwT0Mg6ckfmvEI02rw5NKW8VTcGvXJiF709l0m8MfndPEShNDz1a3w8nT78O9R/8DyYzZM8rkMzPbLdA7wBhaG9HmPGvO75ibz8OC47+vOFPYnMHjwX5G+9vux/vXSS3LwQDtO8r27wPXTedjzzRJo9ZvZCPTy/yj1MvY+84I+hvZ0BNr0av429K3BrPXcHibrvGYQ8NQIUvEC8JT0NeAS7krd/Pc68A75P65M94RdgPZCiuz0+HIs90NtkPFijGruRPLs9+1RQvpiDCD6rvcg9CffyPXoYIT3R/yq+ohDmPZL7jD7qXpQ9yJsAPjLFcr3hdYo7ebm1PoYdrj0jrXS7GZaRPp2Yjz58hXy/7l7iPql4K75ZAz2+gpABv04JEb4cZGW+GzUSv6siiT60eRy+XJTuvLbL4rn9EFo+mHnzvXS4AL4drXs92iqJvgyPCD7LX1a8AO+8uk3aDr4MFg4+iU0Xvnt3HT7XU6s85XQ5u11JFbvdKYC6HKKGvE71pruZlvq76fBfPFWZhjse09g7cin0OhpwUbvieaa8E9GqvMXp8rtFtKw8blb8u58lLrxWAoA54a0VO5jvFTzk/Bo9vOR8ufl4yzzb1km8/gKZOzY6LzxVYy88Mij8PN1lQjwOmYE88mf0uxG6c7yVdqk8fci8vA1DebxLHUE88Sa7vAM4p7toRJ09Bc+uPAfmPz2hcNK7DPC/PInUgbtCwF69qmoHPfTn5rz3uMk81xVluyRzcL3UJ5q8gWukvG/prD2lhyA86hNZPHFZP72beSU989HtPJgOjb3dPE09dYWrvNXKPr2bXJ47dvdju0I5i70Qi188CIM+PU3XuL0uxA6+cltgPBzErTzesus9pIFRvS/e3LuWKBo9WhNKPeza9TzZbTi+Ms+dvMTnBrp6kZw9i+0gvRuYEz7iIZe9v48yvkl1+L1SoYA9QizjvXsdqDuWwDC+uc78PW0xvr0PaQM9oVyGvZflsD7N7CC9kqXSPJJciz3Zcqq+qcogP+LpF7647cs+JqA1Pu9TXD4T9uq91vYWvLT9Qb/iumU8fLYOv7/ccr6TPiM+NjIhPw+mIb5l8368aLiZvMM3gz0xDK+9TfEsPWWW7r0W5ag+6ilkvieGrD1+XDk+7fkIPq9NHb6GG4I9zMOfvPzkqTpmWQ67vCtrOwyvGjxm+kO77t/FOtbXAjoB4LG8/Dk7vJHKArvYTVo8C9TgPDGdiDwYaRk67wxoPIS26LxkQeG8RieTPOpSOb2yxkW85SuhvPbWFLvaIJa06aazvPcEhbwrMEE85jyYO6HNKzxuFTW9tCUhvUcccbzqnlw7PtfCPHvzJDxtIQ08JfTAPDmoG7xdI/W73A6HPDwvoDxgsi29wK3nPJnvkrt//A28MTWYO1/n2TzUKq67F1MUOk6pQ7xQWVs8naS2PGgGHzyDwjS75wEMvJreo71JmLs9CNx/Pccz2DyLuBM9VBxyPBS8mr0henA92+wxPY8WrzsrGee8wJoRPvF5XL2QBj89yqvZvAumqL0jE9a9e+KYPeNXELw8uQg9TPWYvcbIsjzVI7w9as+OvXKBPj2BLrc7pcvaPVmDb7s1mYK62nMtvXqXhjxKngW+SAXIvQ44PD2l26+9o8j/PTjm2L18t6I9x2frPUrNYL29hJW+NlclPiJtdD3OqJU+y1HQPreEJj7aSpU+QT0/Pjdx5j5/cIk+4/CQvn9OJ7+Gtis/uc69PrOB3D1SVIC+sro5PhfDijrrJEy+RmUrPn7DRD5oRas+5wW5PkCRGb4sgxc+kBHivTnv973W6cQ+e3B2vtQMK74HqJa84xbcvSUTEr3Q2G88z5IAPqJ9jjvri5w7uGAgO93RljwI83q8N3OCvNY40DpEDgE7g4/wPONpzLhTSRs6yeuSvPv1YLyLWem7sFg8PR/rhjyiTko8cDeRPANrwbw//wE9f5fHvN0aEj0TXyQ85nhAvcAoST2LduS8LqbKPPGFGLzyN2s8i6XkO6VtmrrgEQy8Wheuu/UyLrwAOaW8hO0UvdWmG7z5Tdw7/fe3u1zxxLu5/f686OYTPXertzz3U2a9s0wBPU207bt5Q3064vocvIhHMDuKRF89EQtIvcO5bzxGDL08Ux9iu1//O70k+x49OtgxvUGJMb1WNPs7Y2kkvDKWhT0VgfE8V1UrPfZceb2vePK9VtSVvCDB1L1RMNu8/oJFPAskIz0yvro70rUIPTf1c71tvjI9Y67NPTzMl71tt7O94Q9MvF9sk73g3Y08YcoovYw78LsGgfo7GtzuPWnJ2bxaYuG82zsgvUHPBb1yWQ+87QoTPWdJlz2BtRK+MJzYvIaIfz7APoq+eB8DPtQLjj5P5mg9U03hPjAcMT7+kvi+KU63vW/IJz4fcOE+8PaLPh7ogT5R/gc/2VYwP+bahL7tGhi/K0y3vjue+j1c54y+n3hLPrTpibrL5HU++kurveb7Yb4TSoU9OGOAPHQUhL6d/Z+8ov4IvYKONL1obJe7+P2xveGHQrxhGea9GVz+uzG8zbuZCPO8jxs0uxNAQ7w4XQ08pV5hPCeoADx5r9i8VkcHPaAwvTs08LM4HTqYu2Xc7Tz06sk6/cxFvOz3ebuME6q8AAwyPMnMkDzQBQM9VhUqPbtNcrzjY309zAdEvChugTxL2CS8iqwPvI2q0rzxNVw9fgu5POYTtLtR18c7/RdBu7sxuDuEP8w8mXvRvLIVqTsQVxq9XdeJPONSbT2zQN860kJKvWkoGT1j/po8Ft7LvBgVgz2VH3K8dIhDvfFRtbtoB569hYkFPT1biD1ydCQ9risUvbChPT2KXyi91AeRPPmECjzi6oG9eyvSvMa54jzAEoO9XiuRu+uPorylpSi9+qEdPL6Mbr0TAD48iiLaPJwmQz3bbeI9I5+wPeoZBLrIibi7VXHgPUX7SDvvJOG8F8ekvWuyoTxvQLE79km5vTIE0b3kjle9SUXNvH+cPz30ZEy+FXOCvatGA76O2+y7U5HjPSpOZzvCFWY+vV6KvIPs+L175aI9aUK6PrqfBb6kpNU9VwCsPoxFOr4lwls+7MggPcSriT7/BJu9DC+avkBPJT8NMTm/t5aPPq6nib0EnhY/p8+cPubcxL4L0rq+EZ8Jvednmz14srA6XVysvQjMj74VqbI8IhOoPUodyr3qMDW+HvUyPeq2vz72BjC+B9VRvhxKUT0vMMM6jLcxPNickzxp1d+5fAwcPdZ1fbykyzy8zUB7PKioYzwuGw+8ihbLutJ3t7tPHx68ToUBPQRNKL1FQfk8z/grvJP5hDouTho7wjy6PGJNIzywCxC78NpZvF+MpLxYajE8NlWqO7lmJbwInti89uGHuzmL9rvDsI07Fw0tO2mjsDuPgOo6dc/BvHbQLDzSfUo9cOnQPF/EAbwsKcK8cjqTPNQEibx/naS9WannO9WZlzx4VYU89TAZvMztVj28HoY8pMPlvEqxybwz6o691/tQvDT7gz3/2MS8q30KvcVjqzlo1qe8PRZXPTc4PbyWc8285kCDvSUHKL34TiU8x76nPR3woDxjZY29NA/su5qcEz1S85W7I7GDvci8M7wwOiQ9KUSiPT5gKbzc74q9DpcBvWyJNL3SnzS9pSudvLIArj1tgYQ8zjWhPWZWSrxBaGo9mH6LvQh13jwAr3q9HwSLPQ4BgT68xbK9wcMWvoL5b721ogk+xtplPUBFl7wgjwS+fO+fPl4eGb6mBLI+/tZ/vtnaK70gYy4/zlM6vu4gST4zYPQ9bK1Qvp/GkD5h1k0//oe1vq4coj5q1GO9bnqgPt8KuzrhKJW9H8IVvIVt6z601o4+YIdMvhGwTz5JsiQ+DnuQu5tAl74WvOi+o2UsPQlVUj16TPG92rHHPb3qlLtNR3A8VnMcvIpUWrwdJGW8DbNuPJmwl7xZdsM7lyZhPLYqqDuWwac8Ao9BvIOWvLzuyWG8GpPkvB4wtDzSP/C8uz6GuxHOJLx58zU9JFakvCKh6TugTlM8NI/xvMWPNz2Xape8zJHbvENtijtDiiK94P0mvNq1Q73rDNq82OQJPChOYLgsJoI9+6cpPAEBtbu1Ne474mYDvTKeRT0QZ7y8YlYPPTg7ID3cgoA80KoHvcm4njyuSxc8vkobOwBHADys1BY96/YwvdSohT2aR648Odj5O0wborzQido8VMZ2PYbgdT3iYR692Up3vX7zyj2W5wu947qNvbhXMT2wypi9eFzmvEEa1Dt/LIQ9EspOvNv2RzxAloi8pGtxvei4sT014M88hQbaO+9GDb5IARq9pxO5PaU1Bb6+tUc9iyYwPrPydz10VyE8IK7uPBM6VD5Zmjc+PoDgvYIfVTwkhiO8JZbYPQOkfr0mbPI8cfmFPRn+97yDbI8+2gT1vDbD/T3wAg8+3ReQPq0esb51V6K9NSvSvFaRvj7U8K49EzbJPOPAHb+ltRo+kAEsvuIDy76+hH++mrwjP/hDwj0ZVio/qXIkPxpAUD57/di88hMLvhvVD76fg44+zhvnvCeaM718QZC9H79PPbp1i72K7Va+fHOrOzwACj4EnNQ8fbPPumKxP7sUnSA8sVALvF+j4rudAiE876RCPN4qMLsSZf27GCVoO6KExrvYXYA8W4xXO//wvDycyd87d3Fcu6Gt/DtuxSW9KSRsvAYk3jt2bQm9myoxvf+h+DsiXY+8LHZPPKnFNDyWSKO7UNMUvQG2rrzzsKq8EjsNPQmC2LyGqEQ92B91vIMxFT3tDqo7Tr2CvH5JpzxtijG72vSpPIsqmrqBjSm73cUUPVdKNrwE0pg9flMEPcVEcz0E94u8xP7ZO2LRkjvnA0s84r0hvWS/Rb0EmxS9aT27PHSxf7xpdya9ZwPuu9BmH72NcZy96fi5uQ+9gL15mhk9VmDVvHOCRz1z6w69xmCTPB2RLr0et2Y9ZwgHPQJm97xFPy69Y5A/Pa4A/z3LHgG+kJRrvddJAj1ej7e6/RTRvWzQhz0KO4+7+4QJveqlE73lWKQ8UN14vc/9+72nvLg9vLElvHjvmDxxioE9sMhXPh/Umb5sNNY9cIXuPCqFiz0u4gu+Up87PUt6GT5MTHO9s0vovWEFnj2sq+I9AT7pPYhLg74WxYc+KcfUvsHbtLzcH5o+HHgPvgxybj7BCOc+5a8ov5vrPb82p3S+yUoEP0ETpz6h+AA9wEG8PS4yF77NbJg9npLWvlWLBjzDUr680Z9CO9uerr7hnTi+aGsGPir887xuPRa7FHybu5p65TumRx68OoPuu0wDYDxi7/C7hiTAvJiVmTr5Mu02UvjUO9ClUjuFCK886CTeO9Lutzzn65g7BRJuPEkUs7ovwjO8qTonvB4GMLwnZz48OWz6OgulnrzaVLQ7yTbPu8rxyDz/egQ8JYmtPB5CKzy3RSW8ho41vMbAaTx8y908EEO7OxR2o7wvSj27b61SvCvrajuiy1I86WS7PAaJNLvFUMu8n+BePGY0I71lTiw9BrQROzmuDjy9Lx88hWzQPAJm1juMLzs8EdolvA0dhjyYnIM8M1PZvHiGmjwcA0q9YqW6PC2ZSz0O2Ka7//cSPGafbbtRW7Y855TzPH1YnDy2W7S865wovKsaqr0G0qy9zdAkvcNIGb2LnKG8SApWvZKY4bs+KF29INZYPQWoTD2w2kk81t+APOveML0x+4g+IvfHPNTGrj2seTi8vzVkPUyhSTyQlU69FPeNvcFlwrufSt+9Y0YfvjISjj1OMgu+L/UUvZ4mjjz+tvS9/0qlus1lML2D4x+9UXGnPY5sND7KO4c+oV9ivminiL6OATo+YRjkPSzlnj6OTA4/LoT7Pk+ZWj5cvQk/7stFvSYEoT2PBSC9xxLEuySaC74BU22/Za7APRENOr6Be8++wawDP+9AZD3j7tM9n3cWvmlIJ77Du489IxL1PGLaBLsCjgi8O5wLuxaJsju9C0c8Ka+OvNxIET3wC7O8STSWO9p487ukjIk7MDMWvIhsgTz7ZiC7vLsoPKYjU7s+/Wu7+x2IOVzkFT3tamq8WJyhOvKPbLztni27GWTVPGlyNb3Rd5U7RXRLvKkAhzy53gg8eeEduw22cTyhr2E9A9G/u8NBNzwv6lA9jRIcvR1wd7sVaYu8F9zoPJGV+DvNv5K8jhg8PeAE7zzL1h282TluvMn6fDogisq8xP/YPCdW1rwWKX+8jG5Gvef9jb2jj4i8udClvKtNvbzr67w8Dp0mvQCPxrxQlBA9o/VTPYR6sr3ERmO99hlNvbzkJr0BKou8IA5uPbBcybxZl9c80h5MvJ4Ahb23TKC8VTzDvDm+DL2b/yK+WEZbvRXo4z2V8X+8hE4YvBe6zT3HhJC9ffwpvcefGr3TWLE8zqu9vVwmGDujXp06KMy/u+SOWz2kw/w9ff3BvbKZ8zxzuxI9YKZgPUFcHD7SQfu9cMMcPX4dYL5iqNa9dHGvvbkXgb02DQi+C/davYhC0L7MOnE+pHEDPjeBsT3k6gC/uhT2veMltz5c2Im+HfMxPli4D741ONQ8xOu6PiqOHT8DAC0/c/AZv8cptb7GsEy+Tc+Uvnm9Lj7G62u91TdgvlYyAb6jBXg+1AmLPk6wL773bqg9BzAwPHkw7jp4CzC7Ih66PC+c4zvHRdi8bPBEuwdPNzsqY628TNU5PFMfXDy1V+S8jPcYPJBy6bzIStO7x14gO+3+ljy0mjs98M1ZPHD8kbzYoIq8F9sePZOOjTw2+Ns8P+4CvcyyhryJuaA8w5cNvZN/e7zmJLQ8lvucuwF9/jtIwCG9HxEwvW9LDrw4vt28OzoFvcJ6Cj0HmPg8/nZfPVPvZDvKjxi9RjjMPM8fsTqCW688yRVHPHUOAr2PA4i8YAaVPGiwJruLkSE95qVvvfjQfrt/bNS8lgxlPQ0LuTyajua870T6vLMzvLw0g+68JTc/vWte2Lx7eg29I2M8uqDun72nZ/q8XK3kvGY5xbzVn5u7PoBePAsxqr0ch2A9wri+uz7KsTyUpcQ81RiovFBg0zzLJrE82hQuvdNnxj275wA9EowjParujDyuZZa9MTmavXqMVr0TIgy931WcPVDHAb7/U+U9LNNTvbT3Pr57/Do+TGuHveo8pT0yOQ69ZktHvaDeLL5oWI69ddH/Pi4nZb7UPO09XXuBPOInWD6rltK9nM7pvNUCnj06xsq+CpaHPlAUYD4I5xK/kpORvvRYKT55pKA+X9xTP0KUob7NQoo+kJL5vAc9Cj8KDHQ+eRHavo3PDb7QwJA9NIlFvMSQOT3OC1O+OvRwvutxI726K3C6ieO1OlKehzwj0Pu7j2sQPGCyLzrAIiC9J7nzuiM6lTx+g2Q6OR/ROfOvDr2XkRK8SwCPPHGlI7w1APw8jjqLPIyi8jxku3I7QTSZvETwsTloFJc8BnGLPJbSf7zlmPk6FVerO+iPGLyw7PU795MKvEJAijw6Sqc8KrPjPEwFPbz0RMc8oh6CPDSykryHFhU7ZCzSu5Uizrwh92o8fRkru8LUDzwi3429bE65O2NarTzw/SE9/nf3PJzp0LxSXcs86YYyvP/ugrvYgVw91rNfvDyXlLz4tFc9rrJCPIujFLxvwr87rcHsPHPvzTsDkpk8vWBsvWcFrrumTKg8o16SvTYfBz0dQL28jxwiO+rogbx5IQA8rA7MvA0ydj0QBLg9VjBIOzWxAL0GPxy9gyatPQ7yDjzZQri9BFY0PNcIlj3M4AW+eSGZPDCMSb755pC9z8vrPdAXYT16J5m98nKWPSPa87yeh8q89P3pvZEcCT4a2io+MO1aPZebpb0L/pg9m92NvFyP0bsg3Yo+85lkvUHhU7xMpUy+muKJvfMuJz7ig5A+Y5GwPfeFL74o1bw8ohmXvhrgwD0dvcK+89FVP3L4FL+swFO9NsHGPh6Hjz4nxIC+JFt9vhVjS75I6pS+vCQdPny1ez5+xh4/avVCvnwChb1Snoo+GuajvjqppbvPbfA5Z4jBuyZTEDxwdOw7nz6oOvRZQLxw0jC8gfXgu5XDErw9LYu6uoekvDa9RDzM46q5YwScvPTiRzmPUN48CCq4PBb1Hrt8Zpg8wfHGPJ7oID12Mto5pq6WvOMDxrr0j0Y79CDhOxNOrjzXkf+8A3aJPMUhMDuaYqO7TkRhu1vQjjzDlS070KZEve2eLb1ENLs7F9C0uxyoDDwr6wA97JuOPAjOLzzBGHQ8BuuYvRp6BT2udmA7wtLLOyLVnjzQI3g8NgkZPYA2krw3C8K80c0cvLCFzTvm9xQ9tChuPBei8buvR0K9xlwhPZMAEr2GjWg90baLvEBGFD2Tv188kluZPbVC3rwxb329ioOsvT5Phb0FHrW9V4N9PfkF2LzY6UG9ZKS7PYgI7bteRoI8j5arvE7vVLzFKjm8WgwHvera9b0mx7g9AnRyPSaVG751OjA9AEp/vGtRBr6Cvse8PobkvdUqCj7/y6A9Q3oOPhtGO768R4C9CYUwvTMjv7owZ5a+t+XpPSzUjT3HOIi+QswVPtBgQz1601w+w1kuPeIRQL1JES2+X9jUvZtY+71DL1E+Df0AvcSJ7r047kG+xxvxPnBCfTxFGKK+lEQ+P4v1kL6o1BS/sLcov4/TvD6KVZy9Q1INvvnyLb5YA56+/LavPUZMuj62Dcq+wlMTu6AChTub5NS7LUtEPOHq7Ls/2J26QeM5u4In1jvxBgs8nb90PK9TPzqBcI+5WabZO056VbxnigY87BxWu2nsEDzGfxG9d66oPEbxBz0cpQO9c1BBPMj7pTrAfwK9KX7IvGnUmLuULFi88bdAvHpPDTqBTAc7zJ0pvRBFCDzITXE7VGacuu/NkjzXpI08b8c7vVEOPjlupZI8yTORvBSPJ7yqOag8n5CvuPQlHDyQDmG93I/MPDDSe701GpS83uBlveWS6bqDcli9Wiexu2Pwg7oh4gQ7gzOUvMgINj1tQx070UuEPbNWTjzuXfo7LiOwvBn9b7yGxeE8vPi3PdMZbb1FBeA8hRNNvPYtGT2nQ5s9PD3vO5bh7DyKAHm9oTGIPcc4dr0Shug9a1+kvP/KoLx765g8QUO1PHx70bsXCDS8u0EhvXjfr71up7A99sGAPY01kryJf7C9IETcvEZIkL2hzPi6584PvJjYKT6KABk96pQ9vmhoHT1ulD49+nxRvtqBjr2GbZI+0MfMvZ0csr1+9iO9fEOAvUeiHr3Rn1I+cCaLvhobDz4IAV0+t8GwvYcu7z4aF5i+QwiCPuk/gj44Gfe6++6bPhyP2D4tkLE+boUnvjt5Or+CIkc/UpcxPo7s4Dv9kuk+n7/NvXV/bj5T1dA8+rmRPUbmrT5mMU46Y2rwOj0kL7z90kq85q6evO8lTDsmYjY8rj/QPAgBgLzMFBc8kgDROhONAj244L68vVTfu/jtmjw+6807dO3aO7Zt7LxZTAs9Y7QPPNf4zbw2yiy8FNIUOgvQyjzdx2I8yf2yPAiggrxiGiA91Zg/ujzSS72flMa8XUGoPMOKaDxYo806yt46PF7mjTzYDKs9FwBXPRFXZLyXpSo8G1XHO70+lbxGBE+8hDyXvEg5ITw+IEg9TO3CO8O2NjyoNVS9NP2wvRt08TxSfQQ84108PAZpIjzusIO8YmSYPPEnLD3bQQQ8f0rNvUj5G72WNR89FGs3vVtBIz1NNHK9R7xGPPr1rb270YA9idEnvadlCb2oiQq9RSBIvZ9Wrr35IMe8Nj43PUqKt73297A9sjJRvb9Y7zx8duW8SCBHvVgwZLxQC+I6bPYkPYBJuLzh9928nKSbvbvetL0Ija08aYC1PT7Wbz3iwTW9tLZpvr+ejjsbVRc+jrcsPWFKEDuzb3I908ASPhTPQ73r7Aa+o8A1vJtV97yTSem9mTl7PR+bvr1CL249Hk2VvayOmD5RDYc+RChFvr5AfT5mS44+U8SJvvna+bzhUuc+pXfZvWW5rD4j4Ik98xrhPraKW75GgjE/rAXOvczXQz9zR+s+52C3PtvSS76jDsM+W9yzPC5ShDu8+3k7hOwkPIuspbyUceg7plDFvFf9TDwtMN27VmaLvB8Cu7xs5ei8c6w8vAYDoDw1gVu8StwkPGZi7rxtRae8m5IXvGXAwLzpft+8Xz+0PANjlbuD+Rs5olgYO+ZlObz2lyi9IJhHuzGRJjxeN/48Q7GcvBrkUTvpXQ46HfhIPbTvlzuGhA28B/gFOw7Rm7tsARk94wjPOyoQPD09yQ87jkESPHl+JDoe7NU7HlbGO7EUxDsQMJ48OTUrvbOSbTyC3Ai9tBkwve+/fjz2T5M8QMUOPZl3+rzL05C9B1fYvEiIAz2rJne8OJtevN6Ujz2Mm/G7ieiXvYvmj7zH4e06dPBWPQvRiz2aDak70tk8vdJQDL4gFw++cqKVOgWWED32lb09LQOwvano4D2yHJ88djoivcH+Wj0ewg29dg2zvad1ozx/ohG9BCXFvAU4+Lx2dF89VIQbPQkI970CtwM+SIzmvOr9Pz0lc22+JIhTPSmdoD0sJLU9jiwrvrLDGj7+6UM+yGE0vs++hT2wUCg+0B0HPdyiqD3Yb/U9BkXCPYif2b0+Gdg9gUmvu9DF9L18al2+MxJivlUexr7uHqg9zw5BPmTu/T2n4Ra/pX71vu5FUL1EZwq/Lt27PcJpwj7ZWmA/ZnrOPXHI+DqFikY+aVkLv2E6rb1j1mo9nFkgOzoDbTw6kPs6OHa1O+YGPTw77SW8fQFxPDWmrDvUK8M8uiYvvP5DITws4vE7UcZiOWxTsTy1ZM27nKeevM9xtDtDGQK81B3pvKeTyzy73QK9/3fcu74vebz2gFo8zzOKO4ZrMzv1mwk8ZA2CvE42Dju61B+9pQO3PKaO9zy4VB47d1IouzYRJTzVT0G8i2JTPLQH7DtbYlY86N2YvL3iB70gwIw8Au4JPFN1C70IzM87Gs6XPMfcDr1CyK28K79LPU00UT1mv0M9aERUvT7NwrwoZKS8a51lPfwE3Txh1Ks8XhG/u5SyFj2r7ym8BJaTPD1q1bw9kLM8KAocvenyyDwC/+46+Q+uvV9TnDyc+KY8VWq9POOloT36XYm8wujqvN7sIj0zLao8kAUUvffK4Dwvr2A9Y2y8PUE0Mj3n6Se9z0FEvE98/buLqwK9TsXxO31gerwz/XS7U+jbvTHuKz7WUeW9kE3cPUX/YL1kSNg8FfFuOwxg771cwRQ9qTXnPRA8YD6sIbo9h9b0OaTPEj7Nf829EeOcvYbvs7wbVz4+jgtpPpb+m74Oex8+S77vviS6jz1uT4E+SwlGvXzVcD5/Zwm/uUiCPnr1F7/rY8I9cZs1v0GEyT1ySiI9gYZKvTT9Ab/dPZi+QtfRviTMBT8XB1e+lrRzPEOpJD7YBp65BrcYPFkF+jsfWqQ6TOxzPBaq5ztgb9W7dnemPPbT6jwzKUm8BoC1PGm1hzuy/D687lMiPM1OGbwCv048kMhSPDyPHTwFsBA7jH+du3m+aTxsVLg71TL7Oz9AXzx+sCk9JHXlvM3oL7xJxJQ8Z6t5O08CJbzBvRO6550KvHYLWzyG0bW5LXWrvEZU4DxgzIY78FrPvIsHM73Qthc9lvBQPXqQN7yZ9GC9HO6hPFTnFbzRqz+8GeANuxvsUD3PADO7RG2FvNOQM71fIBu7Xi3KO3qUBrrvL2k9B6P2u2rz+TxUDq07k3tTvfV9pTxycg48g0gNOyyTCL15ZoI6fh5lPYKkeD04oNq8sSRhPIGOYj17V4W9uSWXvFhVP73b0wg9VpASvM7p6LshEUg9xC0aPFB/+zzRijW6cG82vA2UXjy+Dk89LQE/vXcY6j0UnH89agAAPaJ4Lr183OQ7cDWGPdS6eD2Sady9uw63vcJm5zyxfw+7MdbvvNVHyryEbqI7YiC/vErIFz1hH4s9JPppvccXhb3mJhY+Ki9OvpYHjj6Zvra9JjpqPWQ3Qj7Ozns+v0otPVuy5b0rQ20+TCljvO5Sy7xyd3s+pfcQv8pbBL8LToi9AfKrvjI6qz5rgXo+W8osv2VGhr6NWUU/1ibnvlTjeT6xQt+9zPXDvtrVbbs8evW7c+NLvPGgPzzpKhS7RfmLO+CgXrxhs368FHi+unk3gDmxlQG7hlTUuwb+pTpdoI86by2XPNP07Dsajce8G58svOmPZDxtXti86fmDPINZrbs0AQo8RhD4O+gMRT1nWxw9XjcXu7fMyjsARWu7XPpaPLmDVDxPZ4Y7qsOvPPMXcTunjzy8WVrNPEDWBr0fhxI82dMSvOLzBD2uVoa6Qvvquw3FjjwZvho9xsUMvQ3peToMNx28X+LXO6Wavbza4uS8U+DIPOzhFr1HFws8BFm8PFPjp7weCo481UpOPCD3Vr15lKW8NcqDvYOl2Dvu1Iq7BxqaPDrUpbz4ebM8AXQbPVQVJL3yuF85zzDfPHhYWT1Yd/c95z0yPWagE73ifqC8VfxJPC4WSL3Ro5O8HcmKO/3izT17Qoi9jXzKPedWjLxR/po9Py5XPTEp8zxmd4m8cIr7vLB0Lzz2xXu9iK+HvYjNbj0xYXI974LCvLPYh71dUAG8vDc/PY8yRr1AjMM8bq0evbIEBL39ybQ9yaWfPf6X9L2fl069kSRqPFmLr70m8C6+LBhAPibDiD1vOC0+EDIXPScE0z0BnNs9KKvzPmq2Cr7rQGo+2KaPPaZvpD6J50W9O6k2PiFmg742voK9LWkqvwqO2D5A+TM/gR8+v2/I7z4WIvm+EOuAukagbLqgx4K8AtaxOlAPITwFgTk80Wj+PISXbbtMQ7Q61UwKukC6mLvsqbI81de/Oo7PeTkBy8M744rJPEmXyrrHp1q8ttorPLhJmbsR3gs73bf0vMzohDwABoe8KctMvYhPujyr+0U8F/CEvPMDsbylToU7v3cZvDpOJzvmzIi70Zbdu1+BIb0cons8F9SIPPxPqzwSUi68rXwBvUrSJD2jXIU8Y2EDvfzARzy6ei26jF27vPgUrzwWRIm680AvvLdNmzzjOYw8xn2AOyEAKzwYol+9VHrRu7JulzzH0ug8tINVvDRVzDvH6S689HTDPDhc9Tu2Sjk9xr/5O5hWET04XG+9uKItPD2USj1TkzY9TdoAPVLSljvWgD+9pEMmvAQOO713J5w8k5iIvXXlqDwjbBU8vKaBPQLLbL222dA8ehubPXGGLbzWTHQ9pSWTPV3cgzu+1Gg9h44rva1txr1OYQu+WJ6BvU9lqz1W9Wm9Vsx+vOjxnL2uidG9oGHGvAXHgrwCepS99S9sPD5war1qcWy93gDMvCBnizs4BBU9opFxva/TGL5Ya7c9VsSePXPfA70gP/e8GnedPTJn+T0sywY+0rdAvn+jgT2gZz+9hYwdPlw0ur4HJRG/lG6Bvs9CJr/8MvI+pSUiPa6Eg776tnC/QQwOv5h32D4hEAI87JnXuw73NbyMrCK80W5LPOgTvbwgeok8vTnFPKa5L7tY7yO8tZmmvAF/jzygS3Y82R7sOxseZrsy+LU8viyjO0f2vTxvQDo9qUU+vD3617sLEaw8iuVGPD+b8js70ZC8xSesvLPX+7q4ajA97JN6PNTCF72CbKw7SAMhvAji0TzkvyC9wfEQvciN2jw1nsO8dSGGO7g0P72juXi8S+rIPGtnY7030ag8hQEgPcdFjzwacZm7GCMYPIxIZzwOSCi9p/DTPDPEQL0h3Ui8XUi5O2ZrCLxPcYw8p3KhvTKGBTxPzEO90F3CuwJByTyk1wm9lsOqvChsjz2OEuC70isCPR0PSj2xBRa9ZqqQPAzcUDx0EKY88FZYPec1Ar3Iw6s8EzifOBgRCb1KZEK8Y4pfPCt5Ir2Zp7C7pwRHvQuWjzu4Ydi8q3eNvF2fxrvwGtI937cevYkGVLyUGVo+PP8zPXWIGz0tMp+9k1+pPU7hpLy0kQq98GBsPL5xijx3zLw8t3fNPdaZtb1w0GS9baT3vcVo0L2geda6E7SvPTPqhb7Sl2O7v5QOPpZOlLyMUSE+wl4hvWl4FL54Lso+hhkAPuRgsb6IX+E+Mwx0vvP04r7d3+0+Rc7SvkLFtr5wBvS+pjGmvZPvez4R0Rm/lYODPTg+jz34zEo/W7CQvoONgbo0qjW8Cb0WOmpc4TvqB4a7MLahukzlMDy8a4a7U0KBO8tvN7oNGkc7969Uurm3n7v0iye8NGGVvMTcszqPLag8Lv2aOnT9sbyPmfw8XcSiPOymi7zgXR8847CwO5QZSjmuK1u8q6nyO56SQj3oDJ48oQ3TO2YgUjzGFA28WVnBOOBTJL02eRg8XNOSvGy8k7xT1ZW8+F96PCEsITyzJoe8An41PD+/CD1lOxC7T6NAPG6KED19gPW8mHlTuNsIpbvR0x290drDPO1RWL1Qex28aG3lukw8qrxKggq8o78wvd2DObzhWrc7ZFFYvPYe97xgcYa8aCG0PLe2FTwbBeu8+GJlPNlPF72WoGQ9aueCvK5SRT2tPow9A00ou2KALj18B9O8NECxvHI45rxG3t29X0AtPDJMYb1xgKS8Ay/rPRJvCr3x6E49cmClPR19Mzsatz68fyA6vTp/AT2abNm7qGb8vKGGhz11YTe8CssGPrtOrT1EVou8+PnnPWlHg7u6i+E9E5nRPTojBb5w1aK9IiYqPaAZND0XvBe+h12nvLRJmbwyPkc9ClRQPhLXO747sUA8UuvZO6kaLz4ataw9iMAaPWiKpz5u+66++2+aPr7Evz4b+Yq+tKAOv7FS7b54qrQ+nvaKvioWHD/TFtU+HRgLPxkXuL4THiI/KgNDu+i4vjrEd487nRQVPCGPEbxE37O7gUSuvBk7ODxx8cO7u2xxOiIbYTwkQkm8kR12PHL/Ejx2nc274ivLuyheY7uqq466lkVUPHjkWbxGBqO8Z0bsuwjhBLtiSqW8LtfNui3YUruTRpa84+FJvaQzOzuhgWG7DcfKOVOC0rxHGC89WEf9uldKTTwTULi8aivBPBi8jrwdSd68bbcVPfFXJzxHlQ09S3LVvL7Y4LwNwyk9ZoPAPCMkID0I9q284MVUPINEZ7uR4hg98WMTPM6tsr1fZVU8ih+DvTuI5zwI7ok9GOfqO7hDLzwD7qE2WoWCO+f5vDuweh29iH9UvV1ujT0vh/i8vGOGPZNdUr3HMAa+4wgVPF7lt729/ko9L6fOu8etkz0I7kM8Vo6APUBmA7w4CAK+OSP2vPSLLL3GCJy8tx94Paw6Uj30llm9c8ZYvu0FL72b0OG6EJEpvpMrmT2Xs5E8ybvhPJ9lYr5oYc+91Tf/va7myT2tzLu9YADaPUTLkD1Tx9Q7WS4DPtBN0LxczA8+nK6IPh4LoL0i6Z09LNy1vQyYMT3/L4g9eEvmPcnGbD4WDos9hqblvpjWJLylJLA+kPnuvoiLlb29Wpa+7qnfvWqWF76nt6a9xCuhvqkNx76e0Cw/rjKpuopFRT/YXgs/14IDvmuhtr5shl67ZItFPNAv1btoQd474OLEOmRPCLyxg4S6pnqyu7hVdLtLVY87JyjXu6JKVbzGp5I8twoGPOyt8rlBqAu9d2Dvu4HnLzpDOnm6GYDOOhwnDzvJo468mMkBvGBY37vA1v87fAJRvQLtQ7zaYW+8/ch6vHeS9jzTNOk7wA0SvHHOBr14Ago9U8M4vb6IqbwQZIc8mexbO2mvgbyaXlg8+jmzvPyZ1rxMRrK7uS7yPMqbyTwpGcy8xjOSPAbkIb1kYdS8aXfpPEx78TkoBO88jqh5PQ4ISj36+Rq8rFszvQhk57si0du6Nfnourelc7toIme9ioF1PIUAm70/fN668jATvaGGKL3cR7U7uB5PvStbej04nCS9c/SivdYNaj0cmoQ8T9rMPPduGD21JMy7ksfjPZfomrxA1lI9HDaLPDGun73ln448rkYxPakNlr1fhye9QCvEvOwKID22l+K9XH99PTonPr3PEJ69ab25vTHrjj3pMRa9Q+XhvVHJIb7i7689oTIMvRDrL73Ia5c+bb4ovv0dsD3QOKG9pobXPWU6Lz4L3ns8JSDWO9TY4L0QMTQ+ggCVPGKkZr3dHoG+PZEvvfBjXD7gOLK+/Gu6vb25Yb5k4Iy9JjHBPRCmwD20clu9Xk5+vpzUEL4GXlE+ijvOvX3ynT0ia3U/CTWLPw=="
24
+ },
25
+ "psi": {
26
+ "shape": [
27
+ 128
28
+ ],
29
+ "dtype": "float32",
30
+ "layout": "row-major",
31
+ "data_base64": "Hw/PQUJYKkGxHuNAY6u2QLqpqEC14Z9AwDyIQAl9gkCSSnlAaYpsQOOKaUAdVl5A2W5HQFooOUDzjDZACI0vQFC1LEAOIiNAVI8fQLf9FkA0PBRAhQYQQGQ3DUD3ZAdAaiYFQEHXAkC7+v8/WfT4P4Vb8z9mVe8/aKjsP3V26D+yH+I/nKTeP3zA2z8Vcdc/5GHRP8OI0D8Qa8o/wNXEP6wKwz8MvcA/0xy+P9U6uz9CBrs/5DG4PyywtD/CqLM/Pp+xPwpVrT//7as/k7WoPwlkpT+Ld6I/FlugPydUnj8ZgJs/oOWaP/PGmT9Ok5g/igWWPyIkkz8bPJI/y7yPP8qfjj/0Vow/6dKKP6qKiD+yDoc/wB+FPx9Jgz/RkoI/VWiBP40Ifj/xDns/TTN5P5x0dT/TtHM/qTxyP+FNbT8ITWs/6eJpP+IOaD/XdWc/dNRiPw9SYT/aiV8/q2NePzIIXj8J6Fs/QC5ZP2HjVD9bB1M/Tz1RP0dITT9QJ0w/uWdKP893ST+ZuEc//htFP/xzRD8nBkM/8nhBP/qxPz9fNTw/0ms7P4PGOT9G1zg/NtI0P8fRMz9PqzI/xVYwP/+oLD+wBSw/TIgqPzniKD/9/SY/R1olP4/WJD/rJSI/sUQhP65/Hz9Ruhw/az0cP3HZGj8P+Rk/v4EVP6jRET8="
32
+ }
33
+ }
34
+ }
plda_coreml.png ADDED

Git LFS Details

  • SHA256: da7a48339c30f3daa9e9645880d0b69fcd7744e59318d7e3cd1609233b168084
  • Pointer size: 131 Bytes
  • Size of remote file: 223 kB
plda_parity.png ADDED

Git LFS Details

  • SHA256: 034995886e6dc35c6d76566794f9c766bc97f57ca9c5411c2bd3faa5871a4838
  • Pointer size: 131 Bytes
  • Size of remote file: 192 kB
provenance.json ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "artifact_snapshot": "1ed7a662fdc7109e36d822db793ee6eebdaf8594",
3
+ "artifacts": [
4
+ {
5
+ "path": "Embedding.mlmodelc/analytics/coremldata.bin",
6
+ "sha256": "8d6706436639b53830b4dbe8aaf9c9a843f7f582d63e16f3cb8bb7c6ccd58682",
7
+ "size": 243,
8
+ "storage": "git-lfs"
9
+ },
10
+ {
11
+ "path": "Embedding.mlmodelc/coremldata.bin",
12
+ "sha256": "4a705bac27d151d9642f37609296042a15602a42253039e0921dc9e75da7e004",
13
+ "size": 704,
14
+ "storage": "git-lfs"
15
+ },
16
+ {
17
+ "path": "Embedding.mlmodelc/metadata.json",
18
+ "sha256": "1854371eb6b438fb8aeac96afb45c999af7902581c06afdfcd7ff3cb1ce66be5",
19
+ "size": 2818,
20
+ "storage": "git"
21
+ },
22
+ {
23
+ "path": "Embedding.mlmodelc/model.mil",
24
+ "sha256": "22fa958aef72a561c21f874a07cbdcd30fdf40ee961c0bc2fb67c119273b46d3",
25
+ "size": 78432,
26
+ "storage": "git"
27
+ },
28
+ {
29
+ "path": "Embedding.mlmodelc/weights/weight.bin",
30
+ "sha256": "99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b",
31
+ "size": 13412288,
32
+ "storage": "git-lfs"
33
+ },
34
+ {
35
+ "path": "FBank.mlmodelc/analytics/coremldata.bin",
36
+ "sha256": "0e8bd3a8b82ac123580989f490e4d9245127c535857630b543311268accc3f0a",
37
+ "size": 243,
38
+ "storage": "git-lfs"
39
+ },
40
+ {
41
+ "path": "FBank.mlmodelc/coremldata.bin",
42
+ "sha256": "57ac436bb0671cbb5527a339134d695f752eb77f7a18966b93c6835335595759",
43
+ "size": 853,
44
+ "storage": "git-lfs"
45
+ },
46
+ {
47
+ "path": "FBank.mlmodelc/metadata.json",
48
+ "sha256": "2623785f5d186893b82d01e84aa33a7704ef763c3309e02055f22dc9d871ce9a",
49
+ "size": 3409,
50
+ "storage": "git"
51
+ },
52
+ {
53
+ "path": "FBank.mlmodelc/model.mil",
54
+ "sha256": "27aaeb21569e81bdbe2eef87789f50a37cfea800039bd134448a9417de2f30ed",
55
+ "size": 15667,
56
+ "storage": "git"
57
+ },
58
+ {
59
+ "path": "FBank.mlmodelc/weights/weight.bin",
60
+ "sha256": "9e83fdd3ea78064b078069e4d9141603c61c47a27fd19e7e3142ff7476f8db36",
61
+ "size": 1776896,
62
+ "storage": "git-lfs"
63
+ },
64
+ {
65
+ "path": "PLDA.mlmodelc/analytics/coremldata.bin",
66
+ "sha256": "8e862420707c6fc86c5720adcbc811286235970cf5e0c5afdb7e10e03c937026",
67
+ "size": 243,
68
+ "storage": "git-lfs"
69
+ },
70
+ {
71
+ "path": "PLDA.mlmodelc/coremldata.bin",
72
+ "sha256": "3d5ddb4cf367ad23fb512587f751cddbe4cbf867f53c5395435e6719a6acfd20",
73
+ "size": 535,
74
+ "storage": "git-lfs"
75
+ },
76
+ {
77
+ "path": "PLDA.mlmodelc/metadata.json",
78
+ "sha256": "95eab9a4c9ceb9b16bd36d3eee5530796a0cf78153547088c6c40e9e43999b98",
79
+ "size": 1975,
80
+ "storage": "git"
81
+ },
82
+ {
83
+ "path": "PLDA.mlmodelc/model.mil",
84
+ "sha256": "0c61b5f3fc8d482218ecf3f213ff42e40d6fc38265d3dcf5065da113974b25b8",
85
+ "size": 5088,
86
+ "storage": "git"
87
+ },
88
+ {
89
+ "path": "PLDA.mlmodelc/weights/weight.bin",
90
+ "sha256": "566c14f27af4ef1a4bdfb8ea875adeedd7026a85e1026659f48a3d305d51de0c",
91
+ "size": 199616,
92
+ "storage": "git-lfs"
93
+ },
94
+ {
95
+ "path": "PldaRho.mlmodelc/analytics/coremldata.bin",
96
+ "sha256": "8940ea6044dbcbefa22da8cc41e0b485e1fb5ed89aecaf37c6e0c483a97ddcd7",
97
+ "size": 243,
98
+ "storage": "git-lfs"
99
+ },
100
+ {
101
+ "path": "PldaRho.mlmodelc/coremldata.bin",
102
+ "sha256": "4d9741477f721c79b09fcdfe455110c4b7d4272e2de3496bf1729d966d3ee418",
103
+ "size": 763,
104
+ "storage": "git-lfs"
105
+ },
106
+ {
107
+ "path": "PldaRho.mlmodelc/metadata.json",
108
+ "sha256": "b314cf25a93e46b4076883a6f5a2f8848b73c3851bd9d36074d067f35a1c7945",
109
+ "size": 2749,
110
+ "storage": "git"
111
+ },
112
+ {
113
+ "path": "PldaRho.mlmodelc/model.mil",
114
+ "sha256": "83aee2e5310d19b5f202aea97d07a0e12102556d1b32ef3ed08b36f7f9725041",
115
+ "size": 7613,
116
+ "storage": "git"
117
+ },
118
+ {
119
+ "path": "PldaRho.mlmodelc/weights/weight.bin",
120
+ "sha256": "80f7d229202636d372428c90596f11a91545f07da77259f07153aaf225914a36",
121
+ "size": 200192,
122
+ "storage": "git-lfs"
123
+ },
124
+ {
125
+ "path": "Segmentation.mlmodelc/analytics/coremldata.bin",
126
+ "sha256": "64265f8e7ad41a5f68d630c15288c2499cca5892ad49e20096819cdeac004cdb",
127
+ "size": 243,
128
+ "storage": "git-lfs"
129
+ },
130
+ {
131
+ "path": "Segmentation.mlmodelc/coremldata.bin",
132
+ "sha256": "ea51481b8bd3e496ad3cf16f066ddaa37f20e8772eaac76b3393c28de20e06bc",
133
+ "size": 812,
134
+ "storage": "git-lfs"
135
+ },
136
+ {
137
+ "path": "Segmentation.mlmodelc/metadata.json",
138
+ "sha256": "88dbf0b07208fe142e1729c2b4c974ad3599fcb2ae5d5f18fce782b225384124",
139
+ "size": 3410,
140
+ "storage": "git"
141
+ },
142
+ {
143
+ "path": "Segmentation.mlmodelc/model.mil",
144
+ "sha256": "d37e4ce30b406a6b34f765f769b9baed3178cc0c2b2e299c641daa43a052dd3f",
145
+ "size": 43063,
146
+ "storage": "git"
147
+ },
148
+ {
149
+ "path": "Segmentation.mlmodelc/weights/weight.bin",
150
+ "sha256": "c3189a64946c75bc24fcb98afe89ad78c52bdbadfdf65e857fb1b81e2cc9fbb2",
151
+ "size": 5959360,
152
+ "storage": "git-lfs"
153
+ },
154
+ {
155
+ "path": "mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/model.mlmodel",
156
+ "sha256": "5a4dd0101a27f5d9987005962deee3c1afc84485a1f1ae085054b07e5d1b0473",
157
+ "size": 65850,
158
+ "storage": "git-lfs"
159
+ },
160
+ {
161
+ "path": "mlpackages/Embedding.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
162
+ "sha256": "99356b2985b8d43880a657024d941d450b38820451ccff903f76ed4e52d1868b",
163
+ "size": 13412288,
164
+ "storage": "git-lfs"
165
+ },
166
+ {
167
+ "path": "mlpackages/Embedding.mlpackage/Manifest.json",
168
+ "sha256": "d244a4616ead9bbaebad3c64f999f661af2933cfbcd1ebe12967ff64cb5bd541",
169
+ "size": 617,
170
+ "storage": "git"
171
+ },
172
+ {
173
+ "path": "mlpackages/Fbank.mlpackage/Data/com.apple.CoreML/model.mlmodel",
174
+ "sha256": "fcaf1807057637f7997fa6ee179dc660556ff4cd4812cd51a88c77fca0f25477",
175
+ "size": 12251,
176
+ "storage": "git-lfs"
177
+ },
178
+ {
179
+ "path": "mlpackages/Fbank.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
180
+ "sha256": "9e83fdd3ea78064b078069e4d9141603c61c47a27fd19e7e3142ff7476f8db36",
181
+ "size": 1776896,
182
+ "storage": "git-lfs"
183
+ },
184
+ {
185
+ "path": "mlpackages/Fbank.mlpackage/Manifest.json",
186
+ "sha256": "f56064fcce8fcc8f45053efbe39e15fb3361c3a4e59db888b514396503fa3a3c",
187
+ "size": 617,
188
+ "storage": "git"
189
+ },
190
+ {
191
+ "path": "mlpackages/PldaRho.mlpackage/Data/com.apple.CoreML/model.mlmodel",
192
+ "sha256": "d55f388bb6a47dd3c50bf00098f887e40d40b46a5e32952c3e788280855a62ce",
193
+ "size": 6417,
194
+ "storage": "git-lfs"
195
+ },
196
+ {
197
+ "path": "mlpackages/PldaRho.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
198
+ "sha256": "963b14f282150ec68d498cf4b15bd5e4129595610811862e0bed05f65b95a6de",
199
+ "size": 100352,
200
+ "storage": "git-lfs"
201
+ },
202
+ {
203
+ "path": "mlpackages/PldaRho.mlpackage/Manifest.json",
204
+ "sha256": "1f8e51802df3dfe9f784a98f8b7d841602126e67d6b6c89fb2e24b23f93f5ffd",
205
+ "size": 617,
206
+ "storage": "git"
207
+ },
208
+ {
209
+ "path": "mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/model.mlmodel",
210
+ "sha256": "aa795d1977b785036f002f551bc073572e663b7da35c695a478158b84d3fd763",
211
+ "size": 38767,
212
+ "storage": "git-lfs"
213
+ },
214
+ {
215
+ "path": "mlpackages/Segmentation.mlpackage/Data/com.apple.CoreML/weights/weight.bin",
216
+ "sha256": "0026d3483c74bc989fdd1649c5765ca5395235a6d140a698a2d87b95cddf56ae",
217
+ "size": 2981120,
218
+ "storage": "git-lfs"
219
+ },
220
+ {
221
+ "path": "mlpackages/Segmentation.mlpackage/Manifest.json",
222
+ "sha256": "fae4cc479536d097e5ba8eb03f3c8f4210366f7092a075186531c74530302afa",
223
+ "size": 617,
224
+ "storage": "git"
225
+ },
226
+ {
227
+ "path": "plda-parameters.json",
228
+ "sha256": "38ee28d4269c076cef254ee760bbd811f0738a92e0f01f9699ad372828c5de8f",
229
+ "size": 89416,
230
+ "storage": "git"
231
+ },
232
+ {
233
+ "path": "xvector-transform.json",
234
+ "sha256": "f7cd5cc16e63e2d89db052a23018ecfc47a311998ed1e9e39838fbac65048688",
235
+ "size": 177499,
236
+ "storage": "git"
237
+ }
238
+ ],
239
+ "conversion": {
240
+ "exact_historical_revision_verified": false,
241
+ "recorded_environment": {
242
+ "coremlc": "3500.32.1",
243
+ "coremltools": "9.0b1",
244
+ "mil": "3500.14.1",
245
+ "pyannote-audio": "4.0.0",
246
+ "python": "3.10.12",
247
+ "torch": "2.8.0"
248
+ },
249
+ "reference_repository": "https://github.com/FluidInference/mobius",
250
+ "reference_revision": "33fd6eab634966ae7db4d73da3376a90379642fb"
251
+ },
252
+ "generated_at": "2026-09-19T22:44:51Z",
253
+ "license": "CC-BY-4.0",
254
+ "limitations": [
255
+ "The exact upstream checkout used for the 2025 conversions was not recorded.",
256
+ "The public conversion commit postdates the converted artifacts and is a reference, not an attested historical build commit.",
257
+ "Segmentation and embedding were not rebuilt because the upstream gated-model terms have not been accepted by the release account."
258
+ ],
259
+ "schema_version": 1,
260
+ "source": {
261
+ "exact_historical_revision_verified": false,
262
+ "files": [
263
+ {
264
+ "git_oid": "e3b91de5a5374fc40b556f9cc51317d280b4ea79",
265
+ "path": "segmentation/pytorch_model.bin",
266
+ "size": 5906507,
267
+ "verification": "upstream reference only"
268
+ },
269
+ {
270
+ "git_oid": "6347697826a1958253dd195fa296d8d97b8f6280",
271
+ "path": "embedding/pytorch_model.bin",
272
+ "size": 26646242,
273
+ "verification": "upstream reference only"
274
+ },
275
+ {
276
+ "git_oid": "e61936ef2108eccdff801c440d5e3f6c6995aba4",
277
+ "path": "plda/plda.npz",
278
+ "sha256": "9b77bcd840692710dd3496f62ecfeed8d8e5f002fd991b785079b244eab7d255",
279
+ "size": 133852,
280
+ "verification": "exact tensor match"
281
+ },
282
+ {
283
+ "git_oid": "b8079f30a35a68fe7d996bd7abc2170338ba6767",
284
+ "path": "plda/xvec_transform.npz",
285
+ "sha256": "325f1ce8e48f7e55e9c8aa47e05d2766b7c48c4b25b8de8dd751e7a4cc5fbe8f",
286
+ "size": 134376,
287
+ "verification": "exact tensor match"
288
+ }
289
+ ],
290
+ "reference_revision": "3533c8cf8e369892e6b79ff1bf80f7b0286a54ee",
291
+ "repository": "pyannote/speaker-diarization-community-1"
292
+ },
293
+ "status": "historically-reconstructed"
294
+ }
pyannote_segmentation.mlmodelc/metadata.json ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Mixed (Float16, Float32)",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32 1 × 589 × 7)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 589, 7]",
13
+ "name" : "segments",
14
+ "type" : "MultiArray"
15
+ }
16
+ ],
17
+ "modelParameters" : [
18
+
19
+ ],
20
+ "specificationVersion" : 6,
21
+ "mlProgramOperationTypeHistogram" : {
22
+ "Abs" : 1,
23
+ "InstanceNorm" : 4,
24
+ "Cast" : 4,
25
+ "Conv" : 3,
26
+ "MaxPool" : 3,
27
+ "Lstm" : 4,
28
+ "Transpose" : 2,
29
+ "Linear" : 3,
30
+ "Softmax" : 1,
31
+ "Log" : 1,
32
+ "LeakyRelu" : 5
33
+ },
34
+ "computePrecision" : "Mixed (Float16, Float32, Int32)",
35
+ "isUpdatable" : "0",
36
+ "stateSchema" : [
37
+
38
+ ],
39
+ "availability" : {
40
+ "macOS" : "12.0",
41
+ "tvOS" : "15.0",
42
+ "visionOS" : "1.0",
43
+ "watchOS" : "8.0",
44
+ "iOS" : "15.0",
45
+ "macCatalyst" : "15.0"
46
+ },
47
+ "modelType" : {
48
+ "name" : "MLModelType_mlProgram"
49
+ },
50
+ "userDefinedMetadata" : {
51
+ "com.github.apple.coremltools.source_dialect" : "TorchScript",
52
+ "com.github.apple.coremltools.source" : "torch==2.6.0",
53
+ "com.github.apple.coremltools.version" : "8.3.0"
54
+ },
55
+ "inputSchema" : [
56
+ {
57
+ "hasShapeFlexibility" : "0",
58
+ "isOptional" : "0",
59
+ "dataType" : "Float32",
60
+ "formattedType" : "MultiArray (Float32 1 × 1 × 160000)",
61
+ "shortDescription" : "",
62
+ "shape" : "[1, 1, 160000]",
63
+ "name" : "audio",
64
+ "type" : "MultiArray"
65
+ }
66
+ ],
67
+ "generatedClassName" : "pyannote_segmentation",
68
+ "method" : "predict"
69
+ }
70
+ ]
pyannote_segmentation.mlmodelc/model.mil ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3402.3.2"}, {"coremlc-version", "3402.4.1"}, {"coremltools-component-torch", "2.6.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
3
+ {
4
+ func main<ios15>(tensor<fp32, [1, 1, 160000]> audio) {
5
+ tensor<string, []> audio_to_fp16_dtype_0 = const()[name = tensor<string, []>("audio_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
6
+ tensor<fp16, [1]> sincnet_wav_norm1d_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_wav_norm1d_weight_to_fp16"), val = tensor<fp16, [1]>([0x1.44p-7])];
7
+ tensor<fp16, [1]> sincnet_wav_norm1d_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_wav_norm1d_bias_to_fp16"), val = tensor<fp16, [1]>([0x1.734p-5])];
8
+ tensor<fp16, []> var_25_to_fp16 = const()[name = tensor<string, []>("op_25_to_fp16"), val = tensor<fp16, []>(0x1.5p-17)];
9
+ tensor<fp16, [1, 1, 160000]> audio_to_fp16 = cast(dtype = audio_to_fp16_dtype_0, x = audio)[name = tensor<string, []>("cast_19")];
10
+ tensor<fp16, [1, 1, 160000]> var_41_cast_fp16 = instance_norm(beta = sincnet_wav_norm1d_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_wav_norm1d_weight_to_fp16, x = audio_to_fp16)[name = tensor<string, []>("op_41_cast_fp16")];
11
+ tensor<string, []> outputs_pad_type_0 = const()[name = tensor<string, []>("outputs_pad_type_0"), val = tensor<string, []>("valid")];
12
+ tensor<int32, [1]> outputs_strides_0 = const()[name = tensor<string, []>("outputs_strides_0"), val = tensor<int32, [1]>([10])];
13
+ tensor<int32, [2]> outputs_pad_0 = const()[name = tensor<string, []>("outputs_pad_0"), val = tensor<int32, [2]>([0, 0])];
14
+ tensor<int32, [1]> outputs_dilations_0 = const()[name = tensor<string, []>("outputs_dilations_0"), val = tensor<int32, [1]>([1])];
15
+ tensor<int32, []> outputs_groups_0 = const()[name = tensor<string, []>("outputs_groups_0"), val = tensor<int32, []>(1)];
16
+ tensor<fp16, [80, 1, 251]> var_113_to_fp16 = const()[name = tensor<string, []>("op_113_to_fp16"), val = tensor<fp16, [80, 1, 251]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
17
+ tensor<fp16, [1, 80, 15975]> outputs_cast_fp16 = conv(dilations = outputs_dilations_0, groups = outputs_groups_0, pad = outputs_pad_0, pad_type = outputs_pad_type_0, strides = outputs_strides_0, weight = var_113_to_fp16, x = var_41_cast_fp16)[name = tensor<string, []>("outputs_cast_fp16")];
18
+ tensor<fp16, [1, 80, 15975]> input_1_cast_fp16 = abs(x = outputs_cast_fp16)[name = tensor<string, []>("input_1_cast_fp16")];
19
+ tensor<int32, [1]> var_118 = const()[name = tensor<string, []>("op_118"), val = tensor<int32, [1]>([3])];
20
+ tensor<int32, [1]> var_119 = const()[name = tensor<string, []>("op_119"), val = tensor<int32, [1]>([3])];
21
+ tensor<string, []> input_3_pad_type_0 = const()[name = tensor<string, []>("input_3_pad_type_0"), val = tensor<string, []>("custom")];
22
+ tensor<int32, [2]> input_3_pad_0 = const()[name = tensor<string, []>("input_3_pad_0"), val = tensor<int32, [2]>([0, 0])];
23
+ tensor<bool, []> input_3_ceil_mode_0 = const()[name = tensor<string, []>("input_3_ceil_mode_0"), val = tensor<bool, []>(false)];
24
+ tensor<fp16, [1, 80, 5325]> input_3_cast_fp16 = max_pool(ceil_mode = input_3_ceil_mode_0, kernel_sizes = var_118, pad = input_3_pad_0, pad_type = input_3_pad_type_0, strides = var_119, x = input_1_cast_fp16)[name = tensor<string, []>("input_3_cast_fp16")];
25
+ tensor<fp16, [80]> sincnet_norm1d_0_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_0_weight_to_fp16"), val = tensor<fp16, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40320)))];
26
+ tensor<fp16, [80]> sincnet_norm1d_0_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_0_bias_to_fp16"), val = tensor<fp16, [80]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40576)))];
27
+ tensor<fp16, [1, 80, 5325]> input_5_cast_fp16 = instance_norm(beta = sincnet_norm1d_0_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_0_weight_to_fp16, x = input_3_cast_fp16)[name = tensor<string, []>("input_5_cast_fp16")];
28
+ tensor<fp16, []> var_9_to_fp16 = const()[name = tensor<string, []>("op_9_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
29
+ tensor<fp16, [1, 80, 5325]> input_7_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_5_cast_fp16)[name = tensor<string, []>("input_7_cast_fp16")];
30
+ tensor<string, []> input_9_pad_type_0 = const()[name = tensor<string, []>("input_9_pad_type_0"), val = tensor<string, []>("valid")];
31
+ tensor<int32, [1]> input_9_strides_0 = const()[name = tensor<string, []>("input_9_strides_0"), val = tensor<int32, [1]>([1])];
32
+ tensor<int32, [2]> input_9_pad_0 = const()[name = tensor<string, []>("input_9_pad_0"), val = tensor<int32, [2]>([0, 0])];
33
+ tensor<int32, [1]> input_9_dilations_0 = const()[name = tensor<string, []>("input_9_dilations_0"), val = tensor<int32, [1]>([1])];
34
+ tensor<int32, []> input_9_groups_0 = const()[name = tensor<string, []>("input_9_groups_0"), val = tensor<int32, []>(1)];
35
+ tensor<fp16, [60, 80, 5]> sincnet_conv1d_1_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_1_weight_to_fp16"), val = tensor<fp16, [60, 80, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(40832)))];
36
+ tensor<fp16, [60]> sincnet_conv1d_1_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_1_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(88896)))];
37
+ tensor<fp16, [1, 60, 5321]> input_9_cast_fp16 = conv(bias = sincnet_conv1d_1_bias_to_fp16, dilations = input_9_dilations_0, groups = input_9_groups_0, pad = input_9_pad_0, pad_type = input_9_pad_type_0, strides = input_9_strides_0, weight = sincnet_conv1d_1_weight_to_fp16, x = input_7_cast_fp16)[name = tensor<string, []>("input_9_cast_fp16")];
38
+ tensor<int32, [1]> var_134 = const()[name = tensor<string, []>("op_134"), val = tensor<int32, [1]>([3])];
39
+ tensor<int32, [1]> var_135 = const()[name = tensor<string, []>("op_135"), val = tensor<int32, [1]>([3])];
40
+ tensor<string, []> input_11_pad_type_0 = const()[name = tensor<string, []>("input_11_pad_type_0"), val = tensor<string, []>("custom")];
41
+ tensor<int32, [2]> input_11_pad_0 = const()[name = tensor<string, []>("input_11_pad_0"), val = tensor<int32, [2]>([0, 0])];
42
+ tensor<bool, []> input_11_ceil_mode_0 = const()[name = tensor<string, []>("input_11_ceil_mode_0"), val = tensor<bool, []>(false)];
43
+ tensor<fp16, [1, 60, 1773]> input_11_cast_fp16 = max_pool(ceil_mode = input_11_ceil_mode_0, kernel_sizes = var_134, pad = input_11_pad_0, pad_type = input_11_pad_type_0, strides = var_135, x = input_9_cast_fp16)[name = tensor<string, []>("input_11_cast_fp16")];
44
+ tensor<fp16, [60]> sincnet_norm1d_1_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_1_weight_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89088)))];
45
+ tensor<fp16, [60]> sincnet_norm1d_1_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_1_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89280)))];
46
+ tensor<fp16, [1, 60, 1773]> input_13_cast_fp16 = instance_norm(beta = sincnet_norm1d_1_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_1_weight_to_fp16, x = input_11_cast_fp16)[name = tensor<string, []>("input_13_cast_fp16")];
47
+ tensor<fp16, [1, 60, 1773]> input_15_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_13_cast_fp16)[name = tensor<string, []>("input_15_cast_fp16")];
48
+ tensor<string, []> input_17_pad_type_0 = const()[name = tensor<string, []>("input_17_pad_type_0"), val = tensor<string, []>("valid")];
49
+ tensor<int32, [1]> input_17_strides_0 = const()[name = tensor<string, []>("input_17_strides_0"), val = tensor<int32, [1]>([1])];
50
+ tensor<int32, [2]> input_17_pad_0 = const()[name = tensor<string, []>("input_17_pad_0"), val = tensor<int32, [2]>([0, 0])];
51
+ tensor<int32, [1]> input_17_dilations_0 = const()[name = tensor<string, []>("input_17_dilations_0"), val = tensor<int32, [1]>([1])];
52
+ tensor<int32, []> input_17_groups_0 = const()[name = tensor<string, []>("input_17_groups_0"), val = tensor<int32, []>(1)];
53
+ tensor<fp16, [60, 60, 5]> sincnet_conv1d_2_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_2_weight_to_fp16"), val = tensor<fp16, [60, 60, 5]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(89472)))];
54
+ tensor<fp16, [60]> sincnet_conv1d_2_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_conv1d_2_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125568)))];
55
+ tensor<fp16, [1, 60, 1769]> input_17_cast_fp16 = conv(bias = sincnet_conv1d_2_bias_to_fp16, dilations = input_17_dilations_0, groups = input_17_groups_0, pad = input_17_pad_0, pad_type = input_17_pad_type_0, strides = input_17_strides_0, weight = sincnet_conv1d_2_weight_to_fp16, x = input_15_cast_fp16)[name = tensor<string, []>("input_17_cast_fp16")];
56
+ tensor<int32, [1]> var_150 = const()[name = tensor<string, []>("op_150"), val = tensor<int32, [1]>([3])];
57
+ tensor<int32, [1]> var_151 = const()[name = tensor<string, []>("op_151"), val = tensor<int32, [1]>([3])];
58
+ tensor<string, []> input_19_pad_type_0 = const()[name = tensor<string, []>("input_19_pad_type_0"), val = tensor<string, []>("custom")];
59
+ tensor<int32, [2]> input_19_pad_0 = const()[name = tensor<string, []>("input_19_pad_0"), val = tensor<int32, [2]>([0, 0])];
60
+ tensor<bool, []> input_19_ceil_mode_0 = const()[name = tensor<string, []>("input_19_ceil_mode_0"), val = tensor<bool, []>(false)];
61
+ tensor<fp16, [1, 60, 589]> input_19_cast_fp16 = max_pool(ceil_mode = input_19_ceil_mode_0, kernel_sizes = var_150, pad = input_19_pad_0, pad_type = input_19_pad_type_0, strides = var_151, x = input_17_cast_fp16)[name = tensor<string, []>("input_19_cast_fp16")];
62
+ tensor<fp16, [60]> sincnet_norm1d_2_weight_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_2_weight_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125760)))];
63
+ tensor<fp16, [60]> sincnet_norm1d_2_bias_to_fp16 = const()[name = tensor<string, []>("sincnet_norm1d_2_bias_to_fp16"), val = tensor<fp16, [60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(125952)))];
64
+ tensor<fp16, [1, 60, 589]> input_21_cast_fp16 = instance_norm(beta = sincnet_norm1d_2_bias_to_fp16, epsilon = var_25_to_fp16, gamma = sincnet_norm1d_2_weight_to_fp16, x = input_19_cast_fp16)[name = tensor<string, []>("input_21_cast_fp16")];
65
+ tensor<fp16, [1, 60, 589]> x_cast_fp16 = leaky_relu(alpha = var_9_to_fp16, x = input_21_cast_fp16)[name = tensor<string, []>("x_cast_fp16")];
66
+ tensor<int32, [3]> transpose_4_perm_0 = const()[name = tensor<string, []>("transpose_4_perm_0"), val = tensor<int32, [3]>([2, 0, 1])];
67
+ tensor<string, []> transpose_4_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("transpose_4_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
68
+ tensor<fp32, [512]> add_0 = const()[name = tensor<string, []>("add_0"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(126144)))];
69
+ tensor<fp32, [512]> add_1 = const()[name = tensor<string, []>("add_1"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(128256)))];
70
+ tensor<fp32, [512, 60]> concat_4 = const()[name = tensor<string, []>("concat_4"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(130368)))];
71
+ tensor<fp32, [512, 128]> concat_5 = const()[name = tensor<string, []>("concat_5"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(253312)))];
72
+ tensor<fp32, [512, 60]> concat_6 = const()[name = tensor<string, []>("concat_6"), val = tensor<fp32, [512, 60]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(515520)))];
73
+ tensor<fp32, [512, 128]> concat_7 = const()[name = tensor<string, []>("concat_7"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(638464)))];
74
+ tensor<fp32, [1, 256]> input_25_lstm_layer_0_lstm_h0_reshaped = const()[name = tensor<string, []>("input_25_lstm_layer_0_lstm_h0_reshaped"), val = tensor<fp32, [1, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(900672)))];
75
+ tensor<string, []> input_25_lstm_layer_0_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_direction_0"), val = tensor<string, []>("bidirectional")];
76
+ tensor<bool, []> input_25_lstm_layer_0_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_output_sequence_0"), val = tensor<bool, []>(true)];
77
+ tensor<string, []> input_25_lstm_layer_0_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
78
+ tensor<string, []> input_25_lstm_layer_0_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_cell_activation_0"), val = tensor<string, []>("tanh")];
79
+ tensor<string, []> input_25_lstm_layer_0_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_0_activation_0"), val = tensor<string, []>("tanh")];
80
+ tensor<fp16, [589, 1, 60]> transpose_4_cast_fp16 = transpose(perm = transpose_4_perm_0, x = x_cast_fp16)[name = tensor<string, []>("transpose_6")];
81
+ tensor<fp32, [589, 1, 60]> transpose_4_cast_fp16_to_fp32 = cast(dtype = transpose_4_cast_fp16_to_fp32_dtype_0, x = transpose_4_cast_fp16)[name = tensor<string, []>("cast_18")];
82
+ tensor<fp32, [589, 1, 256]> input_25_lstm_layer_0_0, tensor<fp32, [1, 256]> input_25_lstm_layer_0_1, tensor<fp32, [1, 256]> input_25_lstm_layer_0_2 = lstm(activation = input_25_lstm_layer_0_activation_0, bias = add_0, bias_back = add_1, cell_activation = input_25_lstm_layer_0_cell_activation_0, direction = input_25_lstm_layer_0_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_0_output_sequence_0, recurrent_activation = input_25_lstm_layer_0_recurrent_activation_0, weight_hh = concat_5, weight_hh_back = concat_7, weight_ih = concat_4, weight_ih_back = concat_6, x = transpose_4_cast_fp16_to_fp32)[name = tensor<string, []>("input_25_lstm_layer_0")];
83
+ tensor<fp32, [512]> add_2 = const()[name = tensor<string, []>("add_2"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(901760)))];
84
+ tensor<fp32, [512]> add_3 = const()[name = tensor<string, []>("add_3"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(903872)))];
85
+ tensor<fp32, [512, 256]> concat_14 = const()[name = tensor<string, []>("concat_14"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(905984)))];
86
+ tensor<fp32, [512, 128]> concat_15 = const()[name = tensor<string, []>("concat_15"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1430336)))];
87
+ tensor<fp32, [512, 256]> concat_16 = const()[name = tensor<string, []>("concat_16"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1692544)))];
88
+ tensor<fp32, [512, 128]> concat_17 = const()[name = tensor<string, []>("concat_17"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2216896)))];
89
+ tensor<string, []> input_25_lstm_layer_1_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_direction_0"), val = tensor<string, []>("bidirectional")];
90
+ tensor<bool, []> input_25_lstm_layer_1_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_output_sequence_0"), val = tensor<bool, []>(true)];
91
+ tensor<string, []> input_25_lstm_layer_1_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
92
+ tensor<string, []> input_25_lstm_layer_1_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_cell_activation_0"), val = tensor<string, []>("tanh")];
93
+ tensor<string, []> input_25_lstm_layer_1_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_1_activation_0"), val = tensor<string, []>("tanh")];
94
+ tensor<fp32, [589, 1, 256]> input_25_lstm_layer_1_0, tensor<fp32, [1, 256]> input_25_lstm_layer_1_1, tensor<fp32, [1, 256]> input_25_lstm_layer_1_2 = lstm(activation = input_25_lstm_layer_1_activation_0, bias = add_2, bias_back = add_3, cell_activation = input_25_lstm_layer_1_cell_activation_0, direction = input_25_lstm_layer_1_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_1_output_sequence_0, recurrent_activation = input_25_lstm_layer_1_recurrent_activation_0, weight_hh = concat_15, weight_hh_back = concat_17, weight_ih = concat_14, weight_ih_back = concat_16, x = input_25_lstm_layer_0_0)[name = tensor<string, []>("input_25_lstm_layer_1")];
95
+ tensor<fp32, [512]> add_4 = const()[name = tensor<string, []>("add_4"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2479104)))];
96
+ tensor<fp32, [512]> add_5 = const()[name = tensor<string, []>("add_5"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2481216)))];
97
+ tensor<fp32, [512, 256]> concat_24 = const()[name = tensor<string, []>("concat_24"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2483328)))];
98
+ tensor<fp32, [512, 128]> concat_25 = const()[name = tensor<string, []>("concat_25"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3007680)))];
99
+ tensor<fp32, [512, 256]> concat_26 = const()[name = tensor<string, []>("concat_26"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3269888)))];
100
+ tensor<fp32, [512, 128]> concat_27 = const()[name = tensor<string, []>("concat_27"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(3794240)))];
101
+ tensor<string, []> input_25_lstm_layer_2_direction_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_direction_0"), val = tensor<string, []>("bidirectional")];
102
+ tensor<bool, []> input_25_lstm_layer_2_output_sequence_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_output_sequence_0"), val = tensor<bool, []>(true)];
103
+ tensor<string, []> input_25_lstm_layer_2_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
104
+ tensor<string, []> input_25_lstm_layer_2_cell_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_cell_activation_0"), val = tensor<string, []>("tanh")];
105
+ tensor<string, []> input_25_lstm_layer_2_activation_0 = const()[name = tensor<string, []>("input_25_lstm_layer_2_activation_0"), val = tensor<string, []>("tanh")];
106
+ tensor<fp32, [589, 1, 256]> input_25_lstm_layer_2_0, tensor<fp32, [1, 256]> input_25_lstm_layer_2_1, tensor<fp32, [1, 256]> input_25_lstm_layer_2_2 = lstm(activation = input_25_lstm_layer_2_activation_0, bias = add_4, bias_back = add_5, cell_activation = input_25_lstm_layer_2_cell_activation_0, direction = input_25_lstm_layer_2_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_lstm_layer_2_output_sequence_0, recurrent_activation = input_25_lstm_layer_2_recurrent_activation_0, weight_hh = concat_25, weight_hh_back = concat_27, weight_ih = concat_24, weight_ih_back = concat_26, x = input_25_lstm_layer_1_0)[name = tensor<string, []>("input_25_lstm_layer_2")];
107
+ tensor<fp32, [512]> add_6 = const()[name = tensor<string, []>("add_6"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4056448)))];
108
+ tensor<fp32, [512]> add_7 = const()[name = tensor<string, []>("add_7"), val = tensor<fp32, [512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4058560)))];
109
+ tensor<fp32, [512, 256]> concat_34 = const()[name = tensor<string, []>("concat_34"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4060672)))];
110
+ tensor<fp32, [512, 128]> concat_35 = const()[name = tensor<string, []>("concat_35"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4585024)))];
111
+ tensor<fp32, [512, 256]> concat_36 = const()[name = tensor<string, []>("concat_36"), val = tensor<fp32, [512, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4847232)))];
112
+ tensor<fp32, [512, 128]> concat_37 = const()[name = tensor<string, []>("concat_37"), val = tensor<fp32, [512, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5371584)))];
113
+ tensor<string, []> input_25_batch_first_direction_0 = const()[name = tensor<string, []>("input_25_batch_first_direction_0"), val = tensor<string, []>("bidirectional")];
114
+ tensor<bool, []> input_25_batch_first_output_sequence_0 = const()[name = tensor<string, []>("input_25_batch_first_output_sequence_0"), val = tensor<bool, []>(true)];
115
+ tensor<string, []> input_25_batch_first_recurrent_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
116
+ tensor<string, []> input_25_batch_first_cell_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_cell_activation_0"), val = tensor<string, []>("tanh")];
117
+ tensor<string, []> input_25_batch_first_activation_0 = const()[name = tensor<string, []>("input_25_batch_first_activation_0"), val = tensor<string, []>("tanh")];
118
+ tensor<fp32, [589, 1, 256]> input_25_batch_first_0, tensor<fp32, [1, 256]> input_25_batch_first_1, tensor<fp32, [1, 256]> input_25_batch_first_2 = lstm(activation = input_25_batch_first_activation_0, bias = add_6, bias_back = add_7, cell_activation = input_25_batch_first_cell_activation_0, direction = input_25_batch_first_direction_0, initial_c = input_25_lstm_layer_0_lstm_h0_reshaped, initial_h = input_25_lstm_layer_0_lstm_h0_reshaped, output_sequence = input_25_batch_first_output_sequence_0, recurrent_activation = input_25_batch_first_recurrent_activation_0, weight_hh = concat_35, weight_hh_back = concat_37, weight_ih = concat_34, weight_ih_back = concat_36, x = input_25_lstm_layer_2_0)[name = tensor<string, []>("input_25_batch_first")];
119
+ tensor<int32, [3]> input_25_perm_0 = const()[name = tensor<string, []>("input_25_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
120
+ tensor<string, []> input_25_batch_first_0_to_fp16_dtype_0 = const()[name = tensor<string, []>("input_25_batch_first_0_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
121
+ tensor<fp16, [128, 256]> linear_0_weight_to_fp16 = const()[name = tensor<string, []>("linear_0_weight_to_fp16"), val = tensor<fp16, [128, 256]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5633792)))];
122
+ tensor<fp16, [128]> linear_0_bias_to_fp16 = const()[name = tensor<string, []>("linear_0_bias_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5699392)))];
123
+ tensor<fp16, [589, 1, 256]> input_25_batch_first_0_to_fp16 = cast(dtype = input_25_batch_first_0_to_fp16_dtype_0, x = input_25_batch_first_0)[name = tensor<string, []>("cast_17")];
124
+ tensor<fp16, [1, 589, 256]> input_25_cast_fp16 = transpose(perm = input_25_perm_0, x = input_25_batch_first_0_to_fp16)[name = tensor<string, []>("transpose_5")];
125
+ tensor<fp16, [1, 589, 128]> linear_0_cast_fp16 = linear(bias = linear_0_bias_to_fp16, weight = linear_0_weight_to_fp16, x = input_25_cast_fp16)[name = tensor<string, []>("linear_0_cast_fp16")];
126
+ tensor<fp16, []> var_219_to_fp16 = const()[name = tensor<string, []>("op_219_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
127
+ tensor<fp16, [1, 589, 128]> input_29_cast_fp16 = leaky_relu(alpha = var_219_to_fp16, x = linear_0_cast_fp16)[name = tensor<string, []>("input_29_cast_fp16")];
128
+ tensor<fp16, [128, 128]> linear_1_weight_to_fp16 = const()[name = tensor<string, []>("linear_1_weight_to_fp16"), val = tensor<fp16, [128, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5699712)))];
129
+ tensor<fp16, [128]> linear_1_bias_to_fp16 = const()[name = tensor<string, []>("linear_1_bias_to_fp16"), val = tensor<fp16, [128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5732544)))];
130
+ tensor<fp16, [1, 589, 128]> linear_1_cast_fp16 = linear(bias = linear_1_bias_to_fp16, weight = linear_1_weight_to_fp16, x = input_29_cast_fp16)[name = tensor<string, []>("linear_1_cast_fp16")];
131
+ tensor<fp16, []> var_224_to_fp16 = const()[name = tensor<string, []>("op_224_to_fp16"), val = tensor<fp16, []>(0x1.47cp-7)];
132
+ tensor<fp16, [1, 589, 128]> input_33_cast_fp16 = leaky_relu(alpha = var_224_to_fp16, x = linear_1_cast_fp16)[name = tensor<string, []>("input_33_cast_fp16")];
133
+ tensor<fp16, [7, 128]> classifier_weight_to_fp16 = const()[name = tensor<string, []>("classifier_weight_to_fp16"), val = tensor<fp16, [7, 128]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(5732864)))];
134
+ tensor<fp16, [7]> classifier_bias_to_fp16 = const()[name = tensor<string, []>("classifier_bias_to_fp16"), val = tensor<fp16, [7]>([-0x1.01p+0, 0x1.67cp-2, 0x1.3d8p-1, 0x1.c8cp-2, -0x1.444p-2, -0x1.59p-1, -0x1.8fcp-2])];
135
+ tensor<fp16, [1, 589, 7]> linear_2_cast_fp16 = linear(bias = classifier_bias_to_fp16, weight = classifier_weight_to_fp16, x = input_33_cast_fp16)[name = tensor<string, []>("linear_2_cast_fp16")];
136
+ tensor<int32, []> var_230 = const()[name = tensor<string, []>("op_230"), val = tensor<int32, []>(-1)];
137
+ tensor<fp16, [1, 589, 7]> var_231_softmax_cast_fp16 = softmax(axis = var_230, x = linear_2_cast_fp16)[name = tensor<string, []>("op_231_softmax_cast_fp16")];
138
+ tensor<fp16, []> var_231_epsilon_0_to_fp16 = const()[name = tensor<string, []>("op_231_epsilon_0_to_fp16"), val = tensor<fp16, []>(0x0p+0)];
139
+ tensor<fp16, [1, 589, 7]> var_231_cast_fp16 = log(epsilon = var_231_epsilon_0_to_fp16, x = var_231_softmax_cast_fp16)[name = tensor<string, []>("op_231_cast_fp16")];
140
+ tensor<string, []> var_231_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_231_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
141
+ tensor<fp32, [1, 589, 7]> segments = cast(dtype = var_231_cast_fp16_to_fp32_dtype_0, x = var_231_cast_fp16)[name = tensor<string, []>("cast_16")];
142
+ } -> (segments);
143
+ }
wespeaker.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6f79ae5563cd4807a2e10630ce8aac7bdc469e37d7c723acce06f54df75c1f21
3
+ size 243
wespeaker.mlmodelc/metadata.json ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Float32",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "constant",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float32",
20
+ "formattedType" : "MultiArray (Float32 3 × 256)",
21
+ "shortDescription" : "",
22
+ "shape" : "[3, 256]",
23
+ "name" : "embedding",
24
+ "type" : "MultiArray"
25
+ }
26
+ ],
27
+ "modelParameters" : [
28
+
29
+ ],
30
+ "specificationVersion" : 6,
31
+ "mlProgramOperationTypeHistogram" : {
32
+ "Transpose" : 4,
33
+ "Square" : 2,
34
+ "UpsampleNearestNeighbor" : 1,
35
+ "Squeeze" : 5,
36
+ "Sub" : 5,
37
+ "ReduceMean" : 2,
38
+ "Gather" : 2,
39
+ "Identity" : 1,
40
+ "Reshape" : 1,
41
+ "Matmul" : 2,
42
+ "Concat" : 1,
43
+ "Add" : 19,
44
+ "Sqrt" : 1,
45
+ "RealDiv" : 3,
46
+ "Pad" : 2,
47
+ "Linear" : 2,
48
+ "Relu" : 33,
49
+ "ExpandDims" : 11,
50
+ "Conv" : 36,
51
+ "Maximum" : 1,
52
+ "Log" : 1,
53
+ "SliceByIndex" : 1001,
54
+ "Stack" : 1,
55
+ "ReduceSum" : 4,
56
+ "Mul" : 8
57
+ },
58
+ "computePrecision" : "Mixed (Float32, Int32)",
59
+ "isUpdatable" : "0",
60
+ "stateSchema" : [
61
+
62
+ ],
63
+ "availability" : {
64
+ "macOS" : "12.0",
65
+ "tvOS" : "15.0",
66
+ "visionOS" : "1.0",
67
+ "watchOS" : "8.0",
68
+ "iOS" : "15.0",
69
+ "macCatalyst" : "15.0"
70
+ },
71
+ "modelType" : {
72
+ "name" : "MLModelType_mlProgram"
73
+ },
74
+ "userDefinedMetadata" : {
75
+ "com.github.apple.coremltools.source_dialect" : "TorchScript",
76
+ "com.github.apple.coremltools.source" : "torch==2.6.0",
77
+ "com.github.apple.coremltools.version" : "8.3.0"
78
+ },
79
+ "inputSchema" : [
80
+ {
81
+ "hasShapeFlexibility" : "0",
82
+ "isOptional" : "0",
83
+ "dataType" : "Float32",
84
+ "formattedType" : "MultiArray (Float32 3 × 160000)",
85
+ "shortDescription" : "",
86
+ "shape" : "[3, 160000]",
87
+ "name" : "waveform",
88
+ "type" : "MultiArray"
89
+ },
90
+ {
91
+ "hasShapeFlexibility" : "0",
92
+ "isOptional" : "0",
93
+ "dataType" : "Float32",
94
+ "formattedType" : "MultiArray (Float32 3 × 589)",
95
+ "shortDescription" : "",
96
+ "shape" : "[3, 589]",
97
+ "name" : "mask",
98
+ "type" : "MultiArray"
99
+ }
100
+ ],
101
+ "generatedClassName" : "wespeaker",
102
+ "method" : "predict"
103
+ }
104
+ ]
wespeaker.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
wespeaker.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:680837ec172d67c3197bba93800e1623eebfd35c3b17011802f5f98b8026a0aa
3
+ size 28706752
wespeaker_int8.mlmodelc/metadata.json ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Mixed (Float32, Palettized (8 bits))",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "constant",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float32",
20
+ "formattedType" : "MultiArray (Float32 3 × 256)",
21
+ "shortDescription" : "",
22
+ "shape" : "[3, 256]",
23
+ "name" : "embedding",
24
+ "type" : "MultiArray"
25
+ }
26
+ ],
27
+ "modelParameters" : [
28
+
29
+ ],
30
+ "specificationVersion" : 7,
31
+ "mlProgramOperationTypeHistogram" : {
32
+ "Transpose" : 4,
33
+ "UpsampleNearestNeighbor" : 1,
34
+ "Squeeze" : 5,
35
+ "Ios16.gather" : 2,
36
+ "Ios16.reduceMean" : 2,
37
+ "Ios16.linear" : 2,
38
+ "Ios16.add" : 19,
39
+ "Ios16.realDiv" : 3,
40
+ "Concat" : 1,
41
+ "Ios16.reduceSum" : 4,
42
+ "Ios16.square" : 2,
43
+ "Pad" : 2,
44
+ "Ios16.log" : 1,
45
+ "ExpandDims" : 11,
46
+ "Ios16.sub" : 5,
47
+ "Ios16.relu" : 33,
48
+ "Ios16.reshape" : 1,
49
+ "Ios16.constexprLutToDense" : 38,
50
+ "Ios16.matmul" : 2,
51
+ "SliceByIndex" : 1001,
52
+ "Stack" : 1,
53
+ "Ios16.maximum" : 1,
54
+ "Ios16.conv" : 36,
55
+ "Ios16.sqrt" : 1,
56
+ "Ios16.mul" : 8
57
+ },
58
+ "computePrecision" : "Mixed (Float32, Int32)",
59
+ "isUpdatable" : "0",
60
+ "stateSchema" : [
61
+
62
+ ],
63
+ "availability" : {
64
+ "macOS" : "13.0",
65
+ "tvOS" : "16.0",
66
+ "visionOS" : "1.0",
67
+ "watchOS" : "9.0",
68
+ "iOS" : "16.0",
69
+ "macCatalyst" : "16.0"
70
+ },
71
+ "modelType" : {
72
+ "name" : "MLModelType_mlProgram"
73
+ },
74
+ "userDefinedMetadata" : {
75
+ "com.github.apple.coremltools.source_dialect" : "TorchScript",
76
+ "com.github.apple.coremltools.source" : "torch==2.6.0",
77
+ "com.github.apple.coremltools.version" : "8.3.0"
78
+ },
79
+ "inputSchema" : [
80
+ {
81
+ "hasShapeFlexibility" : "0",
82
+ "isOptional" : "0",
83
+ "dataType" : "Float32",
84
+ "formattedType" : "MultiArray (Float32 3 × 160000)",
85
+ "shortDescription" : "",
86
+ "shape" : "[3, 160000]",
87
+ "name" : "waveform",
88
+ "type" : "MultiArray"
89
+ },
90
+ {
91
+ "hasShapeFlexibility" : "0",
92
+ "isOptional" : "0",
93
+ "dataType" : "Float32",
94
+ "formattedType" : "MultiArray (Float32 3 × 589)",
95
+ "shortDescription" : "",
96
+ "shape" : "[3, 589]",
97
+ "name" : "mask",
98
+ "type" : "MultiArray"
99
+ }
100
+ ],
101
+ "generatedClassName" : "wespeaker_int8",
102
+ "method" : "predict"
103
+ }
104
+ ]
wespeaker_int8.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
wespeaker_v2.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d2b1fcde6121aea3ff0e14c1dc50d09dacb0314a2e89156353c31804230a422f
3
+ size 243
wespeaker_v2.mlmodelc/metadata.json ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Mixed (Float32, Palettized (8 bits))",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32)",
11
+ "shortDescription" : "",
12
+ "shape" : "[]",
13
+ "name" : "constant",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float32",
20
+ "formattedType" : "MultiArray (Float32 3 × 256)",
21
+ "shortDescription" : "",
22
+ "shape" : "[3, 256]",
23
+ "name" : "embedding",
24
+ "type" : "MultiArray"
25
+ }
26
+ ],
27
+ "modelParameters" : [
28
+
29
+ ],
30
+ "specificationVersion" : 7,
31
+ "mlProgramOperationTypeHistogram" : {
32
+ "Transpose" : 4,
33
+ "UpsampleNearestNeighbor" : 1,
34
+ "Squeeze" : 5,
35
+ "Ios16.gather" : 2,
36
+ "Ios16.reduceMean" : 2,
37
+ "Ios16.linear" : 2,
38
+ "Ios16.add" : 19,
39
+ "Ios16.realDiv" : 3,
40
+ "Concat" : 1,
41
+ "Ios16.reduceSum" : 4,
42
+ "Ios16.square" : 2,
43
+ "Pad" : 2,
44
+ "Ios16.log" : 1,
45
+ "ExpandDims" : 11,
46
+ "Ios16.sub" : 5,
47
+ "Ios16.relu" : 33,
48
+ "Ios16.reshape" : 1,
49
+ "Ios16.constexprLutToDense" : 38,
50
+ "Ios16.matmul" : 2,
51
+ "SliceByIndex" : 1001,
52
+ "Stack" : 1,
53
+ "Ios16.maximum" : 1,
54
+ "Ios16.conv" : 36,
55
+ "Ios16.sqrt" : 1,
56
+ "Ios16.mul" : 8
57
+ },
58
+ "computePrecision" : "Mixed (Float32, Int32)",
59
+ "isUpdatable" : "0",
60
+ "stateSchema" : [
61
+
62
+ ],
63
+ "availability" : {
64
+ "macOS" : "13.0",
65
+ "tvOS" : "16.0",
66
+ "visionOS" : "1.0",
67
+ "watchOS" : "9.0",
68
+ "iOS" : "16.0",
69
+ "macCatalyst" : "16.0"
70
+ },
71
+ "modelType" : {
72
+ "name" : "MLModelType_mlProgram"
73
+ },
74
+ "userDefinedMetadata" : {
75
+ "com.github.apple.coremltools.source_dialect" : "TorchScript",
76
+ "com.github.apple.coremltools.source" : "torch==2.6.0",
77
+ "com.github.apple.coremltools.version" : "8.3.0"
78
+ },
79
+ "inputSchema" : [
80
+ {
81
+ "hasShapeFlexibility" : "0",
82
+ "isOptional" : "0",
83
+ "dataType" : "Float32",
84
+ "formattedType" : "MultiArray (Float32 3 × 160000)",
85
+ "shortDescription" : "",
86
+ "shape" : "[3, 160000]",
87
+ "name" : "waveform",
88
+ "type" : "MultiArray"
89
+ },
90
+ {
91
+ "hasShapeFlexibility" : "0",
92
+ "isOptional" : "0",
93
+ "dataType" : "Float32",
94
+ "formattedType" : "MultiArray (Float32 3 × 589)",
95
+ "shortDescription" : "",
96
+ "shape" : "[3, 589]",
97
+ "name" : "mask",
98
+ "type" : "MultiArray"
99
+ }
100
+ ],
101
+ "generatedClassName" : "wespeaker_int8",
102
+ "method" : "predict"
103
+ }
104
+ ]
wespeaker_v2.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
wespeaker_v2.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:34004f6798d35cad7071e2fdc67e63faaa782f53697e1cb49bcb452cf81ae151
3
+ size 7243904
xvector-transform.json ADDED
The diff for this file is too large to render. See raw diff